集成quartz的两种方式说明
spring使用quartz大致有2种方式:
- 一是任务类继承QuartzJobBean,
- 二是在xml文件里定义任务类和要执行的方法,为了简化配置和快速开发,一般使用第一种较多。
pom
<!--quartz相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
具体配置
多个定时任务同时执行
定义任务类
第一种,继承QuartzJobBean,重写excuteInternal方法
第二种
@Component
@EnableScheduling
public class RefreshTrbase {
public void getTrbase() {
System.out.println("1111111....");
}
public void getNews() {
System.out.println("222222....");
}
}
定义配置类
在配置类中定义JobDetail和SimpleTrigger。
@Configuration
public class QuartzConfig {
// 配置定时任务1
@Bean(name = "firstJobDetail")
public MethodInvokingJobDetailFactoryBean firstJobDetail(RefreshTrbase refreshNews) {
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
// 是否并发执行
jobDetail.setConcurrent(true);
// 为需要执行的实体类对应的对象
jobDetail.setTargetObject(refreshNews);
// 需要执行的方法
jobDetail.setTargetMethod("getNews");
return jobDetail;
}
// 配置触发器1
@Bean(name = "firstTrigger")
public CronTriggerFactoryBean firstTrigger(JobDetail firstJobDetail) {
//配置定时任务
CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
trigger.setJobDetail(firstJobDetail);
trigger.setCronExpression("* * * * * ?");
// 设置任务启动延迟
trigger.setStartDelay(0);
return trigger;
}
// 配置定时任务2
@Bean(name = "secondJobDetail")
public MethodInvokingJobDetailFactoryBean secondJobDetail(RefreshTrbase refreshTrbase) {
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
// 是否并发执行
jobDetail.setConcurrent(true);
// 为需要执行的实体类对应的对象
jobDetail.setTargetObject(refreshTrbase);
// 需要执行的方法
jobDetail.setTargetMethod("getTrbase");
return jobDetail;
}
// 配置触发器2
@Bean(name = "secondTrigger")
public CronTriggerFactoryBean secondTrigger(JobDetail secondJobDetail) {
CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
cronTriggerFactoryBean.setJobDetail(secondJobDetail);
cronTriggerFactoryBean.setCronExpression("1 * * * * ?");
// 设置任务启动延迟
cronTriggerFactoryBean.setStartDelay(0);
return cronTriggerFactoryBean;
}
// 配置Scheduler
@Bean(name = "scheduler")
public SchedulerFactoryBean schedulerFactory(Trigger firstTrigger, Trigger secondTrigger) {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
// 延时启动,应用启动1秒后
bean.setStartupDelay(1);
// 注册触发器
bean.setTriggers(firstTrigger, secondTrigger);
return bean;
}
}