2

私たちは私のプロジェクトの初心者の Quartz ユーザーであり、最初の Quartz タスクを作成しています。タスクを実行していますが、明らかにそれらの管理について学びたいと思っています。Spring で次のように構成しました。

<bean name="enoteExpirationTask"    class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="gov.usdoj.afms.enote.job.DailyExpirationJob" />
    <property name="jobDataAsMap">
        <map>
            <entry key="messageService" value-ref="enoteMessageService" />
            <entry key="logicalDeleteAge" value="${expiryProcess.logical.age}" />
            <entry key="physicalDeleteAge" value="${expiryProcess.physical.age}" />
        </map>
    </property>
</bean>
<bean id="cronEnoteExpirationTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="enoteExpirationTask" />
    <property name="cronExpression" value="0 0 7 * * ?" />
</bean>

質問 1: 実行時に変更するとスケジュールが変更されるように、Quartz にこの設定を再読み込みさせることはできますか? これが最も簡単な解決策ですが、何も表示されませんでした。私たちが何かを逃したことを願っています。

質問 2: そうでない場合、Teracotta をはじめとするサード パーティ製のツールがあるはずだと理解しています。スケジュールを簡単に変更できるオープンソースまたはフリーウェアのユーティリティはありますか?

質問 3: そうでない場合、それを行うための小さな Java ユーティリティの作成には何が関係していますか? 1つ書く価値はありますか?それとも、Teracotta には十分な付加価値があり、購入をお勧めしますか? もしそうなら、私が管理者に販売できる違いを生む機能は何ですか?

4

2 に答える 2

6

私の実装(Spring 3.0.6、Quartz 2.2.1):

public interface SchedulerService {

    void register( Class<? extends Job> jobClass, String cronExpression );

    void reschedule( Class<? extends Job> jobClass, String cronExpression );

}

@Service
public class SchedulerServiceImpl implements SchedulerService {

    private Scheduler scheduler;

    @PostConstruct
    void init() {
        try {
            scheduler = StdSchedulerFactory.getDefaultScheduler();
            scheduler.start();
        } catch ( Exception e ) {
            // handle exception
        }
    }

    @PreDestroy
    void destroy() {
        try {
            scheduler.shutdown();
        } catch ( Exception e ) {
            // handle exception
        }
    }

    @Override
    public void register( Class<? extends Job> jobClass, String cronExpression ) {
        try {
            String name = jobClass.getSimpleName();
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule( cronExpression );

            JobDetail jobDetail = JobBuilder.newJob( jobClass ).withIdentity( name ).build();
            CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity( name ).withSchedule( cronScheduleBuilder ).build();

            scheduler.scheduleJob( jobDetail, cronTrigger );
        } catch ( Exception e ) {
            // handle exception
        }
    }

    @Override
    public void reschedule( Class<? extends Job> jobClass, String cronExpression ) {
        try {
            String name = jobClass.getSimpleName();
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule( cronExpression );

            CronTrigger newCronTrigger = TriggerBuilder.newTrigger().withIdentity( name ).withSchedule( cronScheduleBuilder ).build();

            scheduler.rescheduleJob( TriggerKey.triggerKey( name ), newCronTrigger );
        } catch ( Exception e ) {
            // handle exception
        }
    }

}

使用例:

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    SchedulerService schedulerService;

    @PostConstruct
    void init() {
        schedulerService.register( MyJob.class, "0 10 * * * ?" );
    }

    @Override
    public void reschedule( String cronExpression ) {
        schedulerService.reschedule( MyJob.class, cronExpression );
    }

    @DisallowConcurrentExecution
    public static class MyJob implements Job {

        @Override
        public void execute( JobExecutionContext context ) throws JobExecutionException {
            // ...
        }

    }

}
于 2014-06-17T13:32:19.537 に答える
0

あなたがSpringを通じてQuartzを使用しているので、それはおそらくQuartzの問題よりもSpringの問題であり、私はSpringについてあなたを助けるのに十分な知識がありません.

ただし、Spring ラッパーなしで Quartz を使用する場合、Quartz には、XML ファイルでスケジュールを指定するために必要なすべてが搭載されており、オプションで構成可能な間隔で更新をスキャンできます。このプラグインは呼び出されorg.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin、その基本的な構成はドキュメントで説明されています。Quartz ディストリビューションにはいくつかの例が含まれています。例 10 は、デフォルト設定で 120 秒ごとに再スキャンされる XMLSchedulingDataProcessorPlugin とそれに付随するジョブ構成ファイルの使用方法を示しています。そのデモで遊んでそのソースコードを調べることで、Quartz について十分に理解できるはずです。

于 2013-05-15T17:17:29.513 に答える