SpringBoot:整合quartz实现定时任务-集群化配置
文章目录
- 一、为什么需要Quartz集群
- 二、代码实现
一、为什么需要Quartz集群
1、防止单点故障,减少对业务的影响
2、通过负载均衡,减少对节点的压力
3、注意事项
Quartz集群必须将配置持久化到数据库。
Quartz使用的是随机的负载均衡算法,不能指定节点执行。
注意Quartz集群各个节点的时间必须保持同步。
二、代码实现
1、工程结构
2、父节点pom配置
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency><!-- pagehelper 分页插件,包含了mybatis --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><!-- Mysql驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
3、8081节点yml配置
8082配置一样,只是端口号是8082
# 数据库
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456quartz:job-store-type: jdbcjdbc:initialize-schema: alwaysproperties: # quartz集群配置org:quartz:jobStore:isClustered: trueclass: org.springframework.scheduling.quartz.LocalDataSourceJobStoredriverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegatemisfireThreshold: 120000threadPool:threadCount: 20scheduler:instanceName: test-clusterinstanceId: AUTO
mybatis:type-aliases-package: com.pzj.quartz.entitymapper-locations: classpath*:mapper/**/*Mapper.xmlserver:port: 8081
4、编写任务代码
通过@Bean
注解创建JobDetail,Trigger
。
代码内容,可以参考前面的基础篇
SpringBoot:整合quartz实现定时任务-基础篇