因项目重构,需引入定时任务框架quartz,记录整合过程.
第一步: 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>2.4.6</version>
</dependency>
第二步: yml文件配置
spring:
quartz:
properties:
org:
quartz:
scheduler:
instanceName: instanceName
instanceId: AUTO
jobStore:
dataSource: qrtz
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_
isClustered: true
clusterCheckinInterval: 10000
useProperties: false
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
job-store-type: jdbc
jdbc:
initialize-schema: always
datasource:
qrtz:
connection-provider:
class: com.ivan.order.config.DruidConnectionProvider
对应connection-provider类为DruidConnectionProvider
public class DruidConnectionProvider implements ConnectionProvider, ApplicationContextAware {
private static ApplicationContext applicationContext;
private DruidDataSource dataSource;
@Override
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
@Override
public void shutdown() {
dataSource.close();
}
@Override
public void initialize() {
dataSource = (DruidDataSource) applicationContext.getBean(DataSource.class);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
DruidConnectionProvider.applicationContext = applicationContext;
}
}
在依赖的jar包中找到数据库脚本并执行
org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar!\org\quartz\impl\jdbcjobstore\tables_mysql_innodb.sql
第三步: 实现定时任务逻辑
@Slf4j
public class VendorRepliedEmailJob extends QuartzJobBean {
@Autowired
private DeliveryPlanService service;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("执行定时任务——供应商回复交货计划交期提醒采购商");
service.jobVendorRepliedEmail();
log.info("执行定时任务——供应商回复交货计划交期提醒采购商成功");
}
}
第四步: 配置定时任务
@Configuration
public class QuartzConfig {
private static final String ID = "order";
@Bean
public JobDetail vendorRepliedEmailJob() {
return JobBuilder.newJob(VendorRepliedEmailJob.class)
.withIdentity(ID + " vendorRepliedEmailJob")
.storeDurably()
.build();
}
@Bean
public Trigger vendorRepliedEmailJobTrigger() {
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 12,16 * * ?");
return TriggerBuilder.newTrigger()
.forJob(vendorRepliedEmailJob())
.withIdentity(ID + " vendorRepliedEmailJobTrigger")
.withSchedule(scheduleBuilder)
.build();
}
}