广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用springboot+druid双数据源动态配置操作
  • 379
分享到

使用springboot+druid双数据源动态配置操作

2024-04-02 19:04:59 379人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、yml配置二、动态切换数据源配置文件1.数据源db12.数据源db2三、多数据源的mapper包最好是分开四、代码中调用总结进行动态切换,需要在类里面配置,顺便解决mybat

进行动态切换,需要在类里面配置,顺便解决mybatis-plus自带代码无法使用问题,直接上代码:

一、yml配置

数据源可以都是oracle的也可以一个是oracle一个是Mysql的。


spring:
  datasource:
    druid:
      db-type: com.alibaba.druid.pool.DruidDataSource
    #多数据源1:
    zjdb:
      driverClassName: oracle.jdbc.driver.OracleDriver
      url: jdbc:oracle:thin:@XX.XX.XX.XX:1521/ORCL
      username: XXXXXXX
      passWord: XXX
      # \u521D\u59CB\u5316\u8FDE\u63A5\u5927\u5C0F
      initial-size: 5
      # \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570
      min-idle: 5
      max-active: 20
      max-wait: 30000
      # \u53EF\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\u95F4\u9694\u65F6\u95F4
      time-between-eviction-runs-millis: 60000
      # \u914D\u7F6E\u8FDE\u63A5\u5728\u6C60\u4E2D\u7684\u6700\u5C0F\u751F\u5B58\u65F6\u95F4
      min-evictable-idle-time-millis: 300000
      validation-query: select '1' from dual
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # \u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F
      pool-prepared-statements: true
      max-open-prepared-statements: 20
      max-pool-prepared-statement-per-connection-size: 20
      # \u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters
      filters: stat
 
    #多数据源2:
    zjfz:
      driverClassName: oracle.jdbc.driver.OracleDriver
      url: jdbc:oracle:thin:@XX.XX.XX.XX:51521/ORCL
      username: XXXXX
      password: XXXX
#      driverClassName: com.mysql.jdbc.Driver
#      url: jdbc:mysql://127.0.0.1:3306/ketech-dev?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
#      username: root
#      password: 123456
      # \u521D\u59CB\u5316\u8FDE\u63A5\u5927\u5C0F
      initial-size: 5
      # \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570
      min-idle: 5
      max-active: 20
      max-wait: 30000
      # \u53EF\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\u95F4\u9694\u65F6\u95F4
      time-between-eviction-runs-millis: 60000
      # \u914D\u7F6E\u8FDE\u63A5\u5728\u6C60\u4E2D\u7684\u6700\u5C0F\u751F\u5B58\u65F6\u95F4
      min-evictable-idle-time-millis: 300000
      validation-query: select '1' from dual
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # \u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F
      pool-prepared-statements: true
      max-open-prepared-statements: 20
      max-pool-prepared-statement-per-connection-size: 20
      # \u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters
      filters: stat
 
      stat-view-servlet:
        url-pattern: /druid
 
@Configuration
@MapperScan(basePackages = "yin.ketech.app.mapper", sqlSessionFactoryRef = "zjdbSqlSessionFactory")
public class ZjDbConfig {
 
    @Primary
    @Bean(name = "zjdbDataSource")
    @Qualifier("zjdbDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.zjdb")
    public DataSource zjdbDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
 
    @Primary
    @Bean(name = "zjdbSqlSessionFactory")
    @Qualifier("zjdbSqlSessionFactory")
    public SqlSessionFactory zjdbSqlSessionFactory(@Qualifier("zjdbDataSource") DataSource zjdbDataSource) throws Exception {
//        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
//        factoryBean.setDataSource(zjdbDataSource);
        //解决无法使用自带方法问题
        // TODO 使用 MybatisSqlSessionFactoryBean 而不是 SqlSessionFactoryBean
        MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
        factory.setDataSource(zjdbDataSource);
        //添加XML目录
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            factory.setMapperLocations(resolver.getResources("classpath:/yin/ketech/app/mapper
 
@Configuration
@MapperScan(basePackages = "yin.ketech.app.zjfzmapper", sqlSessionFactoryRef = "zjfzSqlSessionFactory")
public class ZjFzConfig { 
 
    @Bean(name = "zjfzDataSource")
    @Qualifier("zjfzDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.zjfz")
    public DataSource zjfzDataSource() {
        return DruidDataSourceBuilder.create().build();
    }
  
    @Bean(name = "zjfzSqlSessionFactory")
    @Qualifier("zjfzSqlSessionFactory")
    public SqlSessionFactory zjfzSqlSessionFactory(@Qualifier("zjfzDataSource") DataSource zjfzDataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(zjfzDataSource);
        //添加XML目录
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            factoryBean.setMapperLocations(resolver.getResources("classpath:/yin/ketech/app/mapper/zjfz/mapper/*.xml"));
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        return factoryBean.getObject();
    } 
 
    @Bean(name = "zjfzSqlSessionTemplate")
    public SqlSessionTemplate zjfzSqlSessionTemplate(@Qualifier("zjfzSqlSessionFactory") SqlSessionFactory zjfzSqlSessionFactory) throws Exception {
        // 使用上面配置的Factory
        SqlSessionTemplate template = new SqlSessionTemplate(zjfzSqlSessionFactory);
        return template;
    }
}
 

三、多数据源的mapper包最好是分开

在扫描的时候会动态注入,可能在上述代码中会导致数据源自动切换失败:

四、代码中调用

总结

  • 1. 注意动态配置的类结合自己的包项目结构修改
  • 2. 解决了mybatis-plus自带语句不能使用问题
  • 3. 解决无法使用分页问题
  • 4. 解决无法使用oracle自增主键问题

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用springboot+druid双数据源动态配置操作

本文链接: https://www.lsjlt.com/news/134891.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作