ShardingDataSource动态数据源整合


 

@ConfigurationProperties(prefix = "mysql.one")  后置处理,配置文件中的指定键值对映射到一个java实体类上

sharding-jdbc 分库分表
https://www.cnblogs.com/hongdada/p/9324473.html
https://blog.csdn.net/hy245120020/article/details/85335446
https://blog.51cto.com/14442094/2450074 http://shardingsphere.apache.org/index_zh.html

shrding是由 io/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class 加载的数据源
io/shardingjdbc/spring/boot/SpringBootConfiguration.class
io.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource

<groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.12.RELEASE</version>
com.alibaba.druid.pool.DruidDataSource  多数据源切换不用@Primary指定一个主数据源

ShardingDataSource  DruidDataSource  整合

 <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.12.RELEASE</version>

 <dependency>
            <groupId>io.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
<dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <!--<version>2.0.4.RELEASE</version>-->
        </dependency>
 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>
<dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>



@Configuration
public class MysDruidConfig {

//    @Primary
    @Bean(name="dOne")
    @ConfigurationProperties(prefix = "mysql.one")
    public DruidDataSource dataSourceOne(){
        DruidDataSource dOne = new DruidDataSource();
        dOne.setQueryTimeout(300);
        dOne.setTestWhileIdle(true);
        dOne.setTestOnBorrow(true);
        dOne.setTestOnReturn(true);
        dOne.setTimeBetweenEvictionRunsMillis(600000);
        dOne.setMinEvictableIdleTimeMillis(300000);
        dOne.setUrl("jdbc:mysql://127.0.0.1/xmh");
        return dOne;
    }

    @Bean(name="dTwo")
    @ConfigurationProperties(prefix = "mysql.two")
    public DruidDataSource dataSourceTwo(){
        DruidDataSource dTwo = new DruidDataSource();
        dTwo.setQueryTimeout(300);
        dTwo.setTestWhileIdle(true);
        dTwo.setTestOnBorrow(true);
        dTwo.setTestOnReturn(true);
        dTwo.setTimeBetweenEvictionRunsMillis(600000);
        dTwo.setMinEvictableIdleTimeMillis(300000);
        dTwo.setUrl("jdbc:mysql://127.0.0.1/xmh2");
        return dTwo;
    }

    @Autowired
    javax.sql.DataSource shardingDataSource;

    SpringBootConfiguration s;

    @Bean(name = "routeDataSource")
    public RouteDataSource dataSource(@Qualifier("dOne")DruidDataSource dOne, @Qualifier("dTwo")DruidDataSource dTwo){
        System.out.println("this.shardingDataSource***************"+this.shardingDataSource);
	System.out.println("DruidDataSource************dOne"+dOne.toString()+" "+dOne.getUrl()+" "+dOne.getMaxActive());
        System.out.println("DruidDataSource************dTwo"+dTwo.toString()+" "+dTwo.getUrl()+" "+dTwo.getMaxActive());
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put("dataSourceOne",dOne);
        targetDataSources.put("dataSourceTwo",shardingDataSource);
        RouteDataSource dataSource = new RouteDataSource();
        dataSource.setTargetDataSources(targetDataSources);
        dataSource.setDefaultTargetDataSource(dTwo);
        System.out.println("routeDataSource******************"+dataSource);
        return  dataSource;
    }
}


@Mapper
public interface MyTestIbatisSharding extends BaseMapper<String> {
    @MyDataSource(dataSourceName="dataSourceTwo")
    @Select("select order_id from t_order ")
    List<String> selectStr();
}

    @Autowired
    cn.com.xmh.ibatisMapper.MyTestIbatisSharding MyTestIbatisSharding;
    System.out.println(" MyTestIbatisSharding*********** "+MyTestIbatisSharding.selectStr());

spring-boot2以上不能使用_
sharding.jdbc.datasource.names=ds0,ds1
sharding.jdbc.datasource.ds0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/xmh
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=admin
sharding.jdbc.datasource.ds1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/xmh2
sharding.jdbc.datasource.ds1.username=root
sharding.jdbc.datasource.ds1.password=admin
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds${user_id % 2}
sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds${0..1}.t_order_${0..1}
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_${order_id % 2}
sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id
sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds${0..1}.t_order_item_${0..1}
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item_${order_id % 2}
sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id

  

 

springboot引入mybatis的xml配置 commons-dbcp 使用默认数据源
<parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>1.5.8.RELEASE</version>
</parent>
<dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MyDaoMapperTest {
    public List<TUser> queryAll();
}

F:\study-idea\space\myboot\src\main\resources\MyMappers\myDaoTestMapper.xml中namespace设置
<mapper namespace="cn.com.myBatisXml.MyDaoMapperTest">

 @Resource
    MyDaoMapperTest myDaoMapperTest;
 System.out.println(myDaoMapperTest.queryAll());



springboot引入mybatis的xml配置 commons-dbcp 使用默认数据源 使用shardingjdbc  不与DruidDataSource一起使用  @Primary
<dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>io.shardingjdbc</groupId>
            <artifactId>sharding-jdbc-core-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>	
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <!--<version>2.0.4.RELEASE</version>-->
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>


sharding.jdbc.datasource.names=ds_0,ds_1
sharding.jdbc.datasource.ds_0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_0.url=jdbc:mysql://localhost:3306/xmh
sharding.jdbc.datasource.ds_0.username=root
sharding.jdbc.datasource.ds_0.password=admin
sharding.jdbc.datasource.ds_1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_1.url=jdbc:mysql://localhost:3306/xmh2
sharding.jdbc.datasource.ds_1.username=root
sharding.jdbc.datasource.ds_1.password=admin
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds_${user_id % 2}
sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds_${0..1}.t_order_${0..1}
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_${order_id % 2}
sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id
sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds_${0..1}.t_order_item_${0..1}
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item_${order_id % 2}
sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id

 for (int i = 0; i < 3; i++) {
            Order order = new Order();
            order.setUserId(55);
            order.setStatus("INSERT_TEST");
            order.setOrderId(3);
            orderRepository.insert(order);
        }
    <insert id="insert" useGeneratedKeys="true" keyProperty="orderId">
        INSERT INTO t_order (
          user_id, status
        )
        VALUES (
        #{userId,jdbcType=INTEGER},
        #{status,jdbcType=VARCHAR}
        )
    </insert>

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM