SpringBootでQuartzと永続化設定を統合する。
Spring BootはQuartzスケジューリングフレームワークの統合サポートを提供しています。Quartzは強力なスケジューリングフレームワークであり、タスクの定期実行やスケジュールタスクなどに使用することができます。
Quartzを統合するには、まずQuartzの依存関係を追加する必要があります。pom.xmlファイルに以下の依存関係を追加してください。
<!-- Quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
次に、Quartzの設定クラスを作成し、Quartzの関連するプロパティやタスクスケジューリングを設定します。
@Configuration
public class QuartzConfig {
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
// 设置触发器
schedulerFactoryBean.setTriggers(trigger1().getObject(), trigger2().getObject());
// 设置任务
schedulerFactoryBean.setJobDetails(jobDetail1().getObject(), jobDetail2().getObject());
// 设置自动启动
schedulerFactoryBean.setAutoStartup(true);
return schedulerFactoryBean;
}
@Bean
public JobDetailFactoryBean jobDetail1() {
JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
jobDetailFactoryBean.setJobClass(MyJob1.class);
jobDetailFactoryBean.setDurability(true);
jobDetailFactoryBean.setRequestsRecovery(true);
return jobDetailFactoryBean;
}
@Bean
public JobDetailFactoryBean jobDetail2() {
JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
jobDetailFactoryBean.setJobClass(MyJob2.class);
jobDetailFactoryBean.setDurability(true);
jobDetailFactoryBean.setRequestsRecovery(true);
return jobDetailFactoryBean;
}
@Bean
public CronTriggerFactoryBean trigger1() {
CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
cronTriggerFactoryBean.setJobDetail(jobDetail1().getObject());
cronTriggerFactoryBean.setCronExpression("0/5 * * * * ?");
return cronTriggerFactoryBean;
}
@Bean
public CronTriggerFactoryBean trigger2() {
CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
cronTriggerFactoryBean.setJobDetail(jobDetail2().getObject());
cronTriggerFactoryBean.setCronExpression("0/10 * * * * ?");
return cronTriggerFactoryBean;
}
}
設定クラス内では、2つのJobDetailと2つのCronTriggerを作成し、それらをSchedulerFactoryBeanに追加しました。したがって、アプリケーションが起動すると、Quartzは設定されたトリガーとタスクに基づいてスケジュールされたタスクを実行します。
最後に、具体的なタスクロジックを処理するために2つのJobクラスを作成します。
public class MyJob1 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 任务逻辑
}
}
public class MyJob2 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 任务逻辑
}
}
これにより、Spring BootとQuartzタスクスケジューリングフレームワークの統合設定が完了しました。
タスクスケジュールの設定を永続化する必要がある場合は、Quartzが提供するJobStoreを使用して実装することができます。一般的に使用されるJobStoreはいくつかあります:
- RAMJobStore:タスクスケジュールの設定をメモリに保存し、アプリケーションを終了するとデータが失われます。
- JDBCJobStoreは、タスクのスケジュール設定をデータベースに保存し、アプリケーションを閉じてもデータは残ります。
- JobStoreCMT:データベースにタスクスケジュールの設定を保存し、コンテナ管理トランザクションをサポートします。
JDBCJobStoreを使用して永続化設定を行うためには、以下の依存関係を追加することができます。
<!-- Quartz JDBC -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jdbc</artifactId>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
Quartzの設定クラスに次のコードを追加してください。
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
// ...
// 设置持久化配置
schedulerFactoryBean.setDataSource(dataSource());
schedulerFactoryBean.setJobFactory(jobFactory());
return schedulerFactoryBean;
}
@Bean
public DataSource dataSource()