springboot整合quartz常见配置
时间: 2023-09-07 13:13:17 浏览: 192
1. 引入依赖
在 `pom.xml` 文件中引入以下依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
```
2. 配置数据源
在 `application.yml` 或 `application.properties` 文件中配置数据源:
```
spring.datasource.url=jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
```
3. 配置Quartz
在 `application.yml` 或 `application.properties` 文件中配置Quartz:
```
# 配置Quartz
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always
spring.quartz.properties.org.quartz.threadPool.threadCount=5
```
`spring.quartz.job-store-type` 指定Quartz使用的存储类型,这里配置为 `jdbc` 表示使用数据库存储。
`spring.quartz.jdbc.initialize-schema` 指定Quartz是否需要初始化数据库表,这里配置为 `always` 表示每次启动应用程序都会初始化数据库表。
`spring.quartz.properties` 是Quartz的属性配置,这里配置了线程池的线程数为5。
4. 编写任务类
编写Quartz任务类,实现 `org.quartz.Job` 接口即可。
```
@Component
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("Hello, Quartz!");
}
}
```
5. 配置任务调度器
编写任务调度器类,实现 `org.springframework.scheduling.quartz.SchedulerFactoryBean` 接口即可。
```
@Configuration
public class QuartzConfig {
@Autowired
private DataSource dataSource;
@Autowired
private MyJob myJob;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setDataSource(dataSource);
// 自定义JobFactory,用于支持Spring的自动注入
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
schedulerFactoryBean.setJobFactory(jobFactory);
// 配置JobDetail
JobDetail jobDetail = JobBuilder.newJob(myJob.getClass()).withIdentity("myJob").build();
// 配置Trigger
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
trigger.setJobDetail(jobDetail);
trigger.setRepeatInterval(5000);
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
// 注册Trigger
schedulerFactoryBean.setTriggers(trigger.getObject());
return schedulerFactoryBean;
}
}
```
6. 自动注入Spring容器
为了支持Spring的自动注入,需要编写一个自定义的 JobFactory。
```
public class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware {
private transient AutowireCapableBeanFactory beanFactory;
@Override
public void setApplicationContext(final ApplicationContext context) {
beanFactory = context.getAutowireCapableBeanFactory();
}
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
final Object job = super.createJobInstance(bundle);
beanFactory.autowireBean(job);
return job;
}
}
```
7. 测试
在需要执行定时任务的方法上添加 `@Scheduled` 注解即可。
```
@Component
public class TestJob {
@Scheduled(cron = "0/5 * * * * ?")
public void test() {
System.out.println("test");
}
}
```
以上是springboot整合quartz的常见配置,可以根据具体需求进行调整。
阅读全文