栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot(50) 整合sharding-jdbc和多数据源

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot(50) 整合sharding-jdbc和多数据源

文章目录
      • 一、前言
      • 二、整合sharding-jdbc和多数据源
        • 1、`pom.xml`中引入依赖
        • 2、`application.yml`中新增多数据源配置
        • 3、sharding-jdbc集成动态数据源配置类
        • 4、使用`@DS`切换数据源
      • 三、本文案例demo源码

一、前言
  1. SpringBoot(48) 整合sharding-jdbc实现分库分表与读写分离
  2. SpringBoot(49) 整合sharding-jdbc实现自定义分库分表

本文将整合sharding-jdbc和多数据源(dynamic-datasource-spring-boot-starter)

二、整合sharding-jdbc和多数据源

springboot整合sharding-jdbc可参看之前的案例,小编这里将基于之前的配置加入多数据源配置

1、pom.xml中引入依赖


    com.baomidou
    dynamic-datasource-spring-boot-starter
    3.3.2

2、application.yml中新增多数据源配置
# 多数据源配置 可参考 https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter
spring:
  datasource:
    dynamic:
      primary: master # 设置默认的数据源或者数据源组,默认值即为master
      strict: false   # 严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/demo?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false # MySQL在高版本需要指明是否进行SSL连接 解决则加上 &useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver
#        db-test:
#          url: jdbc:mysql://127.0.0.1:3306/demo?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false # MySQL在高版本需要指明是否进行SSL连接 解决则加上 &useSSL=false
#          username: root
#          password: root
#          driver-class-name: com.mysql.jdbc.Driver

3、sharding-jdbc集成动态数据源配置类
@Configuration
@AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class, SpringBootConfiguration.class})
public class DataSourceConfig {
    
    public static final String SHARDING_DATA_SOURCE_NAME = "sharding-data-source";
    
    @Autowired
    private DynamicDataSourceProperties properties;

    
    @Lazy
    @Resource(name = "shardingDataSource")
    private AbstractDataSourceAdapter shardingDataSource;

    @Bean
    public DynamicDataSourceProvider dynamicDataSourceProvider() {
        Map datasourceMap = properties.getDatasource();
        return new AbstractDataSourceProvider() {
            @Override
            public Map loadDataSources() {
                Map dataSourceMap = createDataSourceMap(datasourceMap);
                // 将 shardingjdbc 管理的数据源也交给动态数据源管理
                dataSourceMap.put(SHARDING_DATA_SOURCE_NAME, shardingDataSource);
                return dataSourceMap;
            }
        };
    }

    
    @Primary
    @Bean
    public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
        DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource();
        dataSource.setPrimary(properties.getPrimary());
        dataSource.setStrict(properties.getStrict());
        dataSource.setStrategy(properties.getStrategy());
        dataSource.setProvider(dynamicDataSourceProvider);
        dataSource.setP6spy(properties.getP6spy());
        dataSource.setSeata(properties.getSeata());
        return dataSource;
    }

}
4、使用@DS切换数据源

@DS 可以注解在方法/类上,同时存在就近原则 方法上注解 优先于 类上注解。

注解结果
没有@DS默认数据源
@DS(“dsName”)dsName可以为组名也可以为具体某个库的名称

三、本文案例demo源码

https://gitee.com/zhengqingya/java-workspace


今日分享语句:
能力不在脸上,本事不在嘴上!要脚踏实地做实事,生活不会因为某个节点的疏忽就永远灰暗,未来的幸运都是过往努力的积攒!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号