社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
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 {
}
/**
* 定义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");
}
}
@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;
}
@DisallowConcurrentExecution //不开启并发
public class FillUpPhysicalStrengthHandler extends QuartzJobBean{
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("1");
}
}
@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;
}
spring:
quartz:
job-store-type: jdbc #使用数据库存储定时任务
jdbc:
initialize-schema: always
overwrite-existing-jobs: true #每次重启覆盖原有jobs
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!