springboot整合quartz
导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
配置
配置文件
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo
password: 123456
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
quartz:
job-store-type: jdbc
jdbc:
initialize-schema: never
配置类
@Configuration
public class QuartzConfig {
@Bean
public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setDataSource(dataSource);//设置数据源
factory.setQuartzProperties(quartzProperties());//设置参数
factory.setWaitForJobsToCompleteOnShutdown(true);
return factory;
}
public Properties quartzProperties(){
Properties properties = new Properties();
properties.setProperty("org.quartz.jobStore.class","org.springframework.scheduling.quartz.LocalDataSourceJobStore");//将spring数据源交给quartz
properties.setProperty("org.quartz.jobStore.tablePrefix","QRTZ_");//表的前缀
properties.setProperty("org.quartz.jobStore.isClustered","true");//集群模式
properties.setProperty("org.quartz.jobStore.acquireTriggersWithinLock","true");//获取trigger的时候加锁
return properties;
}
}
任务
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("running at "+new Date());
}
}
使用
简单实现一个任务的添加和删除
@Service
@RequiredArgsConstructor
public class JobService {
private final Scheduler scheduler;
@SneakyThrows
public void scheduleJob(){
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity(new JobKey("j1", "g1"))
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(new TriggerKey("j1", "g1"))
.withSchedule(SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
scheduler.scheduleJob(jobDetail,trigger);
}
@SneakyThrows
public void removeJob() {
scheduler.deleteJob(new JobKey("j1", "g1"));
}
}
监听器
//监听任务,也可以使用其他监听器,以监听触发器和调度器
public class MyListener implements JobListener {
@Override
public String getName() {
return "myListener";
}
@Override
public void jobToBeExecuted(JobExecutionContext jobExecutionContext) {
System.out.println("即将执行");
}
@Override
public void jobExecutionVetoed(JobExecutionContext jobExecutionContext) {
System.out.println("是否可以执行");
}
@Override
public void jobWasExecuted(JobExecutionContext jobExecutionContext, JobExecutionException e) {
System.out.println("已经执行");
}
}
配置
@Bean
public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setDataSource(dataSource);
factory.setQuartzProperties(quartzProperties());
factory.setWaitForJobsToCompleteOnShutdown(true);
factory.setGlobalJobListeners(new MyListener());//配置监听器
return factory;
}