美文网首页
Sharding-JDBC实战(一)

Sharding-JDBC实战(一)

作者: 杭城码龙 | 来源:发表于2019-01-23 17:27 被阅读0次

    本文讲解sharding-jdbc的分库分表功能,基于eclipse开发工具,以maven项目来讲解,jdk是1.7的版本。

    sharding-jdbc以jar包形式提供服务,所以要先引入maven依赖。

    1.最精简版pom.xml文件:
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.hello.dba</groupId>
      <artifactId>sharding-jdbc-demo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
       <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      <dependencies>
      <dependency>
        <groupId>io.shardingsphere</groupId>
        <artifactId>sharding-jdbc-core</artifactId>
        <version>3.1.0</version>
    </dependency>
      <dependency>
       <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
      </dependencies>
    </project> 
    
    2. 规则配置

    配置是整个sharding-jdbc的核心,是sharding-jdbc中唯一与应用开发者打交道的模块。
    sharding-jdbc可以通过Java、YAML、Spring命名空间和Spring Boot Starter四种方式配置。本文讲解java的配置方式,代码如下:

     // 配置真实数据源
            Map<String, DataSource> dataSourceMap = new HashMap<>();
            
            // 配置第一个数据源
               //org.apache.commons.dbcp.BasicDataSource
            BasicDataSource dataSource1 = new BasicDataSource();
            dataSource1.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource1.setUrl("jdbc:mysql://10.0.0.1:3306/ds0");
            dataSource1.setUsername("dba_01");
            dataSource1.setPassword("123456");
            dataSourceMap.put("ds0", dataSource1);
            
            // 配置第二个数据源
                //org.apache.commons.dbcp.BasicDataSource
            BasicDataSource dataSource2 = new BasicDataSource();
            dataSource2.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource2.setUrl("jdbc:mysql://10.0.0.2:3306/ds1");
            dataSource2.setUsername("dba_01");
            dataSource2.setPassword("123456");
            dataSourceMap.put("ds1", dataSource2);
            
            // 配置Order表规则
            TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration();
            orderTableRuleConfig.setLogicTable("t_order");
            orderTableRuleConfig.setActualDataNodes("ds${0..1}.t_order${0..1}");
            
            // 配置分库 + 分表策略
            orderTableRuleConfig.setDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds${user_id % 2}"));
            orderTableRuleConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order${order_id % 2}"));
            
            // 配置分片规则
            ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
            shardingRuleConfig.getTableRuleConfigs().add(orderTableRuleConfig);
            
            // 获取数据源对象
               //javax.sql.DataSource
            DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new ConcurrentHashMap<String, Object>(), new Properties());
    
    3.数据库表信息

    第一个DB(ds0):


    image.png

    第二个DB(ds1):


    image.png

    备注:表结构需要有user_id和order_id字段,一个是分库字段,一个是分表字段

    相关文章

      网友评论

          本文标题:Sharding-JDBC实战(一)

          本文链接:https://www.haomeiwen.com/subject/sbksjqtx.html