多数据源 - dynamic-datasource | 集成 Quartz 及 ShardingJDBC

本文介绍了如何在Spring Boot应用中集成Quartz定时任务框架和ShardingJDBC进行多数据源管理。通过自定义SchedulerFactoryBeanCustomizer或使用@QuartzDataSource指定数据源,实现Quartz的独立配置。同时,详细阐述了引入ShardingJDBC的步骤和配置动态数据源的方式,以应对部分表分库分表的需求。文章还提供了相关进阶话题链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


🗯️ 上节回顾:上一节中,我们集成了 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甘蓝聊Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值