SpringBoot - 集成Quartz框架之独立数据源(四)

写在前面

在开始之前请先阅读:
SpringBoot - 集成Quartz框架之CRON表达式
SpringBoot - 集成Quartz框架之Quartz简介(一)
SpringBoot - 集成Quartz框架之常用配置(二)
SpringBoot - 集成Quartz框架之具体步骤(三)
SpringBoot - 集成Quartz框架之独立数据源(四)
SpringBoot - 集成Quartz框架之常见问题(五)
SpringBoot - 集成Quartz框架之@DisallowConcurrentExecution注解详解(六)

接下里的操作步骤是在上一篇:SpringBoot - 集成Quartz框架之具体步骤(三)的基础上进行修改的。

具体步骤

1. 添加依赖

添加新的依赖使得项目支持动态数据源的切换。

<!-- 数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
</dependency>

<!-- 动态数据源 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>
2. 修改配置

修改application.yml,使得项目能够支持多数据源的配置。

# 数据源配置
spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
    dynamic:
      # 默认值为: master。用于设置默认的数据源或者数据源组
      primary: master
      # 是否启用严格模式, 默认值为false, 表示不启动。 如果启动后当未匹配到指定数据源时回抛出异常, 如果不启动当未匹配到指定数据源时会使用默认数据源.比如: 当代码中切换数据源为@DS("h2"), 因为没有配置名称为h2的数据源, 所以会使用默认的数据源master。
      strict: false
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,wall,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
        # 主库数据源
        master:
          driver-class-name: org.postgresql.Driver
          url: jdbc:postgresql://localhost:5432/servicex-business?useUnicode=true&characterEncoding=utf-8&autoReconnect-true&useSSL=false&serverTimezone=Asia/Shanghai
          username: root
          password: 123456
        # 从库数据源
        quartz:
          driver-class-name: org.postgresql.Driver
          url: jdbc:postgresql://localhost:5432/servicex-quartz?useUnicode=true&characterEncoding=utf-8&autoReconnect-true&useSSL=false&serverTimezone=Asia/Shanghai
          username: root
          password: 123456
3. 添加数据源配置类
@Configuration
public class ServicexDataSourceConfig {
    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master")
    public DruidDataSource servicexBusinessDataSource() {
        return new DruidDataSource();
    }
    
    @Bean
    @QuartzDataSource
    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.quartz")
    public DruidDataSource servicexQuartzDataSource() {
        return new DruidDataSource();
    }
}
4. 修改调度器工厂
@Configuration
public class SchedulerConfig {

    // 配置文件路径
    private static final String SERVICEX_QUARTZ_CONFIG_PATH = "/servicex-quartz.properties";

    // 控制器工厂类
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(@Qualifier("servicexQuartzDataSource") DruidDataSource dataSource) {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setDataSource(dataSource);
        factory.setQuartzProperties(quartzProperties());
        factory.setStartupDelay(1);
        factory.setApplicationContextSchedulerContextKey("SERVICEX-APPLICATION-CONTEXT-KEY");
        factory.setOverwriteExistingJobs(true);
        factory.setAutoStartup(true);
        return factory;
    }

    @Bean
    @ConditionalOnResource(resources = SERVICEX_QUARTZ_CONFIG_PATH)
    Properties quartzProperties() {
        try {
            PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
            propertiesFactoryBean.setLocation(new ClassPathResource(SERVICEX_QUARTZ_CONFIG_PATH));
            propertiesFactoryBean.afterPropertiesSet();
            Properties properties = propertiesFactoryBean.getObject();
            return properties;
        } catch (IOException e) {
            System.out.println("QUARTZ相关的配置文件不存在.");
            e.printStackTrace();
        }
        return null;
    }
}
5. 其他配置不变

其他的配置以及代码,与上一篇博文一样保持不变。

在servicex-quartz.properties配置文件中添加如下配置不起作用,指定数据源无效

QUARTZ官网-配置说明文档

按照QUARTZ官网-配置说明文档进行独立数据源的配置,一直不生效,仍然使用业务库的数据源。

在这里插入图片描述

org.quartz.jobStore.dataSource = SERVICEX-QUARTZ-DS

#============================================================================
# 4. 数据源配置
#============================================================================
org.quartz.dataSource.SERVICEX-QUARTZ-DS.connectionProvider.class = com.hadoopx.quartz.config.DruidConnectionProvider
org.quartz.dataSource.SERVICEX-QUARTZ-DS.driver = org.postgresql.Driver
org.quartz.dataSource.SERVICEX-QUARTZ-DS.URL = jdbc:postgresql://localhost:5432/servicex-quartz?useUnicode=true&characterEncoding=utf-8&autoReconnect-true&useSSL=false&serverTimezone=Asia/Shanghai
org.quartz.dataSource.SERVICEX-QUARTZ-DS.user = root
org.quartz.dataSource.SERVICEX-QUARTZ-DS.password = 123456
org.quartz.dataSource.SERVICEX-QUARTZ-DS.maxConnection = 5
org.quartz.dataSource.SERVICEX-QUARTZ-DS.validationQuery = SELECT 0 FROM DUAL

@QuartzDataSource的作用是什么?

Spring Boot (2.4.2)Reference Documentation
Spring Boot (2.4.2)关于QUARTZ的相关说明

当基于SpringBoot框架的项目与QUARTZ集成,且QUARTZ需要使用指定的数据源时,需要按下面的方案进行处理,其他的方案都不生效。@QuartzDataSource注解是SpringBoot提供的与QUARTZ集成时使用指定数据的方案。

To have Quartz use a DataSource other than the application’s main DataSource, declare a DataSource bean, annotating its @Bean method with @QuartzDataSource. Doing so ensures that the Quartz-specific DataSource is used by both the SchedulerFactoryBean and for schema initialization.
如果Quartz框架使用除了应用程序主数据源之外的其他数据源,需要声明一个数据源BEAN,并使用@QuartzDataSource注解标注它的@Bean方法,这样才可以确保SchedulerFactoryBean创建以及初始化时,都使用特定于QUARTZ制定的数据源。

使用要点:

(1)创建不同的数据源
(2)创建调度器工厂时指定QUARTZ使用的数据源
(3)项目支持多数据源的动态切换
(4)项目默认使用主数据源

源码、示例及DEMO

源码、示例及DEMO

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目描述 在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为模板引擎,shiro作为安全框架,主流技术 几乎零XML,极简配置 两套UI实现(bootstrap+layer ui),可以自由切换 报表后端采用技术: SpringBoot整合SSM(Spring+Mybatis-plus+ SpringMvc),spring security 全注解式的权限管理和JWT方式禁用Session,采用redis存储token及权限信息 报表前端采用Bootstrap框架,结合Jquery Ajax,整合前端Layer.js(提供弹窗)+Bootstrap-table(数据列表展示)+ Bootstrap-Export(各种报表导出SQL,Excel,pdf等)框架,整合Echars,各类图表的展示(折线图,饼图,直方图等),使用了layui的弹出层、菜单、文件上传、富文本编辑、日历、选项卡、数据表格等 Oracle关系型数据库以及非关系型数据库(Redis),Oracle 性能调优(PL/SQL语言,SQL查询优化,存储过程等),用Redis做中间缓存,缓存数据 实现异步处理,定时任务,整合Quartz Job以及Spring Task 邮件管理功能, 整合spring-boot-starter-mail发送邮件等, 数据源:druid 用户管理,菜单管理,角色管理,代码生成 运行环境 jdk8+oracle+redis+IntelliJ IDEA+maven 项目技术(必填) Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis 数据库文件 压缩包内 jar包文件 maven搭建 Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统 http://localhost:/8080/login admin admin Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统
项目描述 在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为模板引擎,shiro作为安全框架,主流技术 几乎零XML,极简配置 两套UI实现(bootstrap+layer ui),可以自由切换 报表后端采用技术: SpringBoot整合SSM(Spring+Mybatis-plus+ SpringMvc),spring security 全注解式的权限管理和JWT方式禁用Session,采用redis存储token及权限信息 报表前端采用B ootstrap框架,结合Jquery Ajax,整合前端Layer.js(提供弹窗)+Bootstrap-table(数据列表展示)+ Bootstrap-Export(各种报表导出SQL,Excel,pdf等)框架,整合Echars,各类图表的展示(折线图,饼图,直方图等),使用了layui的弹出层、菜单、文件上传、富文本编辑、日历、选项卡、数据表格等 Oracle关系型数据库以及非关系型数据库(Redis),Oracle 性能调优(PL/SQL语言,SQL查询优化,存储过程等),用Redis做中间缓存,缓存数据 实现异步处理,定时任务,整合Quartz Job以及Spring Task 邮件管理功能, 整合spring-boot-starter-mail发送邮件等, 数据源:druid 用户管理,菜单管理,角色管理,代码生成 运行环境 jdk8+oracle+redis+IntelliJ IDEA+maven 项目技术(必填) Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis 数据库文件 压缩包内 jar包文件 maven搭建 Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统 http://localhost:/8080/login admin admin Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统
可以通过以下步骤来初始化Spring Boot集成Quartz的表数据: 1. 确保在Spring Boot项目中已经添加了Quartz依赖。可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2. 配置数据源。在application.properties或application.yml文件中添加以下配置: ``` spring.datasource.url=<数据库URL> spring.datasource.username=<数据库用户名> spring.datasource.password=<数据库密码> spring.datasource.driver-class-name=<数据库驱动> ``` 3. 添加Quartz配置。在Spring Boot项目中创建一个Quartz配置类,例如: ```java @Configuration public class QuartzConfig { @Autowired private DataSource dataSource; @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setDataSource(dataSource); factory.setJobFactory(jobDetailFactoryBean().getJobFactory()); return factory; } @Bean public JobDetailFactoryBean jobDetailFactoryBean() { JobDetailFactoryBean factory = new JobDetailFactoryBean(); factory.setJobClass(MyJob.class); factory.setDurability(true); return factory; } @Bean public CronTriggerFactoryBean cronTriggerFactoryBean() { CronTriggerFactoryBean factory = new CronTriggerFactoryBean(); factory.setJobDetail(jobDetailFactoryBean().getObject()); factory.setCronExpression("0/5 * * * * ?"); return factory; } @Bean public Scheduler scheduler() { return schedulerFactoryBean().getScheduler(); } } ``` 4. 运行Spring Boot应用程序。在第一次运行应用程序时,Quartz会自动创建必要的表结构。如果需要手动创建表,可以使用Quartz提供的SQL脚本。可以在quartz-core.jar包中找到这些脚本,例如: ``` org.quartz.impl.jdbcjobstore.StdJDBCDelegate ``` 通过以上步骤,就可以初始化Spring Boot集成Quartz的表数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值