前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ShardingSphere多数据源,读写分离等的实现

ShardingSphere多数据源,读写分离等的实现

作者头像
算法之名
发布2020-04-24 17:13:21
2K0
发布2020-04-24 17:13:21
举报
文章被收录于专栏:算法之名

鉴于shardingsphere已经升级,我们现在使用的是RC2的版本

代码语言:javascript
复制
<dependency>
   <groupId>org.apache.shardingsphere</groupId>
   <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
   <version>4.0.0-RC2</version>
</dependency>

有关分表的实现可以参考Springboot2使用shardingsphere分表攻略

现在假设我们在A库中有一个t1表,B库中有一个t2表

t1表字段如下

t2表字段如下

Spring的配置文件如下

代码语言:javascript
复制
spring:
  shardingsphere:
    datasource:
      names: db1,db2
      db1:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/cloud_resource?useSSL=FALSE&serverTimezone=GMT%2B8
        username: root
        password: ****
        type: com.alibaba.druid.pool.DruidDataSource
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
      db2:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/cloud_resource_base?useSSL=FALSE&serverTimezone=GMT%2B8
        username: root
        password: ****
        type: com.alibaba.druid.pool.DruidDataSource
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
    masterslave:
      load-balance-algorithm-type: round_robin
      name: ms
      master-data-source-name: db1
      slave-data-source-names: db1,db2

Spring的main方法如下

代码语言:javascript
复制
@EnableFeignClients
@EnableTransactionManagement
@SpringBootApplication(exclude = JtaAutoConfiguration.class)
public class ResourceCenterApplication {

   public static void main(String[] args) {
      SpringApplication.run(ResourceCenterApplication.class, args);
   }

}

通过一系列对两张表的查询,我们可以看到

2020-04-02 15:39:07.018 DEBUG [resource-center,9c42f77c03330c96,9c42f77c03330c96,false] 2205 --- [nio-8004-exec-1] com.cloud.resourcecenter.dao.T1Dao.find : ==> Preparing: select id,name from t1 where id=? 2020-04-02 15:39:07.395 DEBUG [resource-center,9c42f77c03330c96,9c42f77c03330c96,false] 2205 --- [nio-8004-exec-1] com.cloud.resourcecenter.dao.T1Dao.find : ==> Parameters: 1(Integer) 2020-04-02 15:39:07.849 DEBUG [resource-center,9c42f77c03330c96,9c42f77c03330c96,false] 2205 --- [nio-8004-exec-1] com.cloud.resourcecenter.dao.T1Dao.find : <== Total: 1 2020-04-02 15:39:25.317 DEBUG [resource-center,7010cb123ed124e9,7010cb123ed124e9,false] 2205 --- [nio-8004-exec-4] com.cloud.resourcecenter.dao.T2Dao.find : ==> Preparing: select id,age,address from t2 where id=? 2020-04-02 15:39:25.346 DEBUG [resource-center,7010cb123ed124e9,7010cb123ed124e9,false] 2205 --- [nio-8004-exec-4] com.cloud.resourcecenter.dao.T2Dao.find : ==> Parameters: 1(Integer) 2020-04-02 15:39:25.356 DEBUG [resource-center,7010cb123ed124e9,7010cb123ed124e9,false] 2205 --- [nio-8004-exec-4] com.cloud.resourcecenter.dao.T2Dao.find : <== Total: 1

操作起来没有任何问题,不同库的表都可以正常访问。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档