springboot 集成quartz定时任务,设置两个相同时间的定时任务,只有一个执行
时间: 2023-10-21 20:02:48 浏览: 328
在Spring Boot中集成Quartz定时任务,并设置两个相同时间的定时任务,但只有一个任务会执行。具体可以按照以下步骤实现:
1. 引入Quartz和Spring Boot相关的依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
```
2. 创建定时任务Job类,继承Quartz提供的`QuartzJobBean`类,并重写`executeInternal`方法,编写任务需要执行的业务逻辑。
3. 创建定时任务的触发器Trigger,可以使用`CronTriggerImpl`类,设置定时任务的触发时间表达式。
4. 在Spring Boot配置类中,使用`@Bean`注解创建SchedulerFactoryBean,负责创建和配置Scheduler对象。
```java
@Configuration
public class QuartzConfig {
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
// 配置定时任务Job和Trigger
schedulerFactoryBean.setTriggers(triggerA(), triggerB());
return schedulerFactoryBean;
}
@Bean
public CronTrigger triggerA() {
return new CronTriggerImpl("0/5 * * * * ?");
}
@Bean
public CronTrigger triggerB() {
return new CronTriggerImpl("0/5 * * * * ?");
}
@Bean
public JobDetailFactoryBean jobDetailFactoryBean() {
JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
jobDetailFactoryBean.setJobClass(MyJob.class);
return jobDetailFactoryBean;
}
}
```
5. 创建自定义的Job类MyJob,继承Quartz提供的`QuartzJobBean`类,并重写`executeInternal`方法,编写任务需要执行的业务逻辑。
```java
public class MyJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 任务执行的业务逻辑
System.out.println("定时任务执行");
}
}
```
通过以上步骤,我们已经完成了在Spring Boot中集成Quartz定时任务的配置。由于两个相同时间的定时任务都被添加到了Scheduler对象中,但只有一个线程负责任务调度,所以只有一个任务会被执行。
阅读全文