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はいくつかあります:

  1. RAMJobStore:タスクスケジュールの設定をメモリに保存し、アプリケーションを終了するとデータが失われます。
  2. JDBCJobStoreは、タスクのスケジュール設定をデータベースに保存し、アプリケーションを閉じてもデータは残ります。
  3. 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()
bannerAds