Spring Boot 整合 Quartz
目录
@EnableScheduling
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
@Component
public class MyTask {
private static final Logger LOGGER = LoggerFactory.getLogger(MyTask.class);
private static final long SECOND = 1000;
/**
* 注入service
*/
@Autowired
private UserService userService;
/**
* 固定间隔3秒,可以引用变量
* fixedRate:以每次开始时间作为测量,间隔固定时间
*/
@Scheduled(fixedRate = 3 * SECOND)
public void task1() {
LOGGER.info("当前时间:{}\t\t任务:fixedRate task,每3秒执行一次", System.currentTimeMillis());
userService.test();
}
/**
* 固定延迟3秒,从前一次任务结束开始计算,延迟3秒执行
*/
@Scheduled(fixedDelay = 3000)
public void task3(){
//do something
}
/**
* cron表达式,每5秒执行
*/
@Scheduled(cron = "*/5 * * * * ?")
public void task2() {
LOGGER.info("当前时间:{}\t\t任务:cron task,每5秒执行一次", System.currentTimeMillis());
}
}
请注意,计划任务的方法的返回值应该为void,并且不能有任何参数。如果该方法需要与应用程序上下文中的其他对象进行交互,那么通常会通过依赖注入来提供这些对象。
implementation 'org.springframework.boot:spring-boot-starter-quartz' // quartz
server:
port: 9001
servlet:
context-path: /quartz
spring:
thymeleaf:
mode: HTML
cache: false
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-boot-quartz?useSSL=false&useUnicode=true
username: root
password: 123456
initial-size: 1 #连接池初始大小
max-active: 20 #连接池中最大的活跃连接数
min-idle: 1 #连接池中最小的活跃连接数
max-wait: 60000 #配置获取连接等待超时的时间
pool-prepared-statements: true #打开PSCache,并且指定每个连接上PSCache的大小
max-pool-prepared-statement-per-connection-size: 20
validation-query: SELECT 1 FROM DUAL
validation-query-timeout: 30000
test-on-borrow: false #是否在获得连接后检测其可用性
test-on-return: false #是否在连接放回连接池后检测其可用性
test-while-idle: true #是否在连接空闲一段时间后检测其可用性
quartz:
properties:
org:
quartz:
scheduler:
instanceName: quartzScheduler
instanceId: AUTO
jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_
isClustered: false
clusterCheckinInterval: 10000
useProperties: false
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
job-store-type: JDBC
jdbc:
initialize-schema: NEVER
mybatis:
type-aliases-package: com.lee.quartz.entity
mapper-locations: classpath:mybatis/mapper/*.xml
pagehelper:
helper-dialect: mysql
reasonable: true
logging:
level:
com.lee.quartz.mapper: debug
之后编写 Service ,在里面进行依赖注入 Scheduler、JobMapper 等即可。
官方的 SQL 文件可在 GitHub 上查看:https://github.com/quartz-scheduler/quartz/blob/master/quartz-core/src/main/resources/org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql
略。
Spring Boot教程(二十):Spring Boot使用String Task定时任务
SpringBoot 整合 Quartz 实现依赖数据库数据动态设置定时任务