Springboot中如何使用quartz - Go语言中文社区

Springboot中如何使用quartz


首先我们导入依赖

 1. 使用springboot在导包的时候首先应该想到看看官网是否有spring-boot-starter-* 类似的官方包 
 2. 其次再看是否有	*-boot-starter 这种第三方包
<dependency>
    <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
@Configuration
public class QuartzConfig {

}
  • 第二步:在配置类中添加bean
/**
     * 定义job
     *
     * @return
     */
    @Bean
    public MethodInvokingJobDetailFactoryBean ctsJobDetail(Job job) {
        MethodInvokingJobDetailFactoryBean factoryBean = new MethodInvokingJobDetailFactoryBean();
        factoryBean.setGroup("job");
        factoryBean.setName("run"); //定义job类中的方法名
        factoryBean.setTargetObject(job); //目标类也就是要执行job的类
        factoryBean.setTargetMethod("exec");
        factoryBean.setConcurrent(false);
        return factoryBean;
    }
  • 第三步: 定义一个普通类
@Component
public class Job  {
   public void run() {
       System.out.println("我是job");
   }
}
  • 在quartz配置类定义Trigger(与上面类似spring中也定义了两种Trigger的FactoryBean)(我们使用CronTriggerFactoryBean
 @Bean("ctsTriggerFactoryBean")
    public CronTriggerFactoryBean ctsTriggerFactoryBean(MethodInvokingJobDetailFactoryBean ctsJobDetail) {
        CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
        cronTriggerFactoryBean.setName("ctsTrigger");
        cronTriggerFactoryBean.setJobDetail(ctsJobDetail.getObject());
        cronTriggerFactoryBean.setCronExpression("0 0/1 * * * ? ");
        return cronTriggerFactoryBean;
    }
  • 按理来说我们还应该定义SchedulerFactoryBean调度器,但是springboot自动配置已经配置了默认调度器(所以我们无需配置)
    在这里插入图片描述
    这样我们就可以直接运行启动应用进行调度任务执行

  • 但是使用MethodInvokingJobDetailFactoryBean虽然简单但是在使用quart jdbc模式时候会报无法序列化问题

  • 因此我们使用第二种JobDetailFactoryBean

  • 第一步定义JobDetailFactoryBean

 @Bean(name = "jobDetail1")
    public JobDetailFactoryBean jobDetail1(){
        JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(Job.class);
        jobDetailFactoryBean.setDurability(true);
        jobDetailFactoryBean.setName("job1");
        jobDetailFactoryBean.setGroup("job1");
        return jobDetailFactoryBean;
    }
  • 第二步: 定义job类(必须继承QuartzJobBean)
@DisallowConcurrentExecution //不开启并发
public class FillUpPhysicalStrengthHandler extends QuartzJobBean{
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("1");
    }
}
  • 第三步:定义Trigger(与上边类似)
    @Bean(name = "cronTriggerFactoryBean1")
    public CronTriggerFactoryBean cronTriggerFactoryBean1 (@Qualifier(value = "jobDetail1") JobDetailFactoryBean jobDetail1) {
        CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
        cronTriggerFactoryBean.setJobDetail(jobDetail1.getObject());
        cronTriggerFactoryBean.setCronExpression("0 0/1 * * * ? ");
        return cronTriggerFactoryBean;
    }
  • 第四步: 配置application
spring:
  quartz:
   job-store-type: jdbc #使用数据库存储定时任务
   jdbc:
     initialize-schema: always
   overwrite-existing-jobs: true #每次重启覆盖原有jobs
  • 第五步 : 执行数据库脚本 导入quartz需要的表,在orgquartz-schedulerquartz2.3.1quartz-2.3.1.jar!orgquartzimpljdbcjobstore 下有各种sql脚本按自己数据库导入即可。
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_21602341/article/details/107320517
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢