0

私のアプリでは、クォーツを使用して、Glassfish の Java アプリケーションで実行するジョブをスケジュールしています。アプリケーションを再デプロイしているときに、スケジューラをオフにするのを忘れて、アプリの新しいバージョンがデプロイされた後にスケジューラを停止できないことがあります。したがって、問題は、アプリケーションがアンデプロイされた後、どのようにクォーツのスレッドを停止/強制終了できるかです。

ジョブを追加するコードは次のとおりです。

        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched sched = sf.getScheduler();

        // 1: EMS2ELC JOB /////////////
        String EMS2ELCScheduleEx = "0 30 0 * * ?";
        job = new JobDetail("EMS2ELCJob", "WebServicesGroup", EMS2ELCJob.class);
        trigger = new CronTrigger("EMSTrigger", "WebServicesGroup", "EMS2ELCJob", "WebServicesGroup", EMS2ELCScheduleEx, TimeZone.getTimeZone("America/Los_Angeles"));
        sched.addJob(job, true);
        ft = sched.scheduleJob(trigger);
        log.info("SchedulerController: " + job.getFullName() + " has been scheduled to run at: " + ft + " and repeat based on expression: " + trigger.getCronExpression());
4

1 に答える 1

4

再デプロイというと、ホットデプロイ、つまりglassfishサーバーを終了させないということですか?ServletContextListener.contextDestroyed() メソッドを実装し、そこから Quartz API によって提供されるシャットダウン フックを呼び出すことができます。リスナーを web.xml に登録する必要があります

于 2009-02-13T03:21:00.593 に答える