文章目录
🗯️ 上节回顾:上一节中,我们集成了 MyBatisPlus 及 p6spy。
👉 本节目标:实现第三方技术框架的集成,比如 Quartz、ShardingJDBC。
🚀 本节内容:
- 集成 Quartz
- 集成 ShardingJDBC
🔊 版本
- JDK 17
- Spring Boot 3.2.1
- dynamic-datasource 4.3.0
集成 Quartz
Github:https://github.com/quartz-scheduler/quartz
文档:http://www.quartz-scheduler.org/
Quartz 是一个定时任务框架,常常用于解决分布式系统下的定时任务协调问题。
Quartz 常常需要独立运行在主业务数据库外, 在 springboot 场景中可以以下面方式运行。
引入 quartz-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
配置数据源参数
根据需要可配置独立数据源的参数,或把 quartz 数据源也作为动态数据源的一个数据源。
一般来说二种方式根据需要选择一种即可,如果没有在动态数据源里需要切到 quartz 的的场景,建议独立配。
spring:
datasource: #独立quartz配置
username: root
password: 123456
url: jdbc:mysql://39.108.158.138:3306/quartz
driver-class-name: com.mysql.cj.jdbc.Driver
dynamic:
datasource:
master:
username: sa
password: ""
url: jdbc:h2:mem:test
driver-class-name: org.h2.Driver
quartz: #把quartz数据源也作为动态数据源的一个数据源
username: root
password: 123456
url: jdbc:mysql://39.108.158.138:3306/quartz
driver-class-name: com.mysql.cj.jdbc.Driver
quartz:
job-store-type: jdbc
jdbc:
initialize-schema: always
创建任务
创建一个每秒打印一次hello world的任务。
@Slf4j
public class HelloworldJob extends QuartzJobBean {
private static int time = 0;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("Hello world!:" + jobExecutionContext.getJobDetail().getKey() + "-" + (time++));
}
}
对应的自动配置:
@Configuration
public class QuartzCommonAutoConfiguration {
@Bean
public JobDetail job() {
return JobBuilder.newJob(HelloworldJob.class)
.withIdentity("myJob1", "myJobGroup1")
//JobDataMap可以给任务execute传递参数
.usingJobData