天天看点

shardingjdbc使用与入门在其他表不动的情况下分表分库与springBoot的简单整合我! 日! 你! 妈! 耶!

shardingjdbc使用与入门与springBoot的简单整合

首先我知道背地里说上司的的不是很不好,影响很差,可能会影响到我将来的出路,甚至以后换工作如果被人挖出了这个博客甚至都有可能不要我了,但是我是真的忍不住了

我! 日! 你! 妈! 耶!

好了,骂完了,对不起!!!

公司有一张表数据量特大,说是有月入上亿的数据量,上司规划不好 当初做的时候没有考虑那么多,想一出是一出,先在查询速度贼慢,上司说要做分片,然后他不会,把任务交给了我这个去面试别人都说我连一年经验都算不上的人.好了我就开始鼓捣sharding-jdbc,之前真的没用过这玩意儿,只知道他是一个轻量级的在代码层的数据分片技术,开始鼓捣,官方文档,百度,专业前辈

最后终于整到项目里了:

  1. yaml,配置文件
sharding:
  jdbc:
    datasource:
      names: ds0,ds1,ds2  #配置的数据源名字
      ds0:
        type: com.alibaba.druid.pool.DruidDataSource #连接池
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/order1
        username: root
        password: root
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/order2
        username: root
        password: root
      ds2:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://********:3306/*****?characterEncoding=utf8&useSSL=false
        username: *****
        password: ******
    config:
      sharding:
        props:
          sql.show: true
        tables:
          t_user:  #表的逻辑名称
            key-generator-column-name: id  #主键
            actual-data-nodes: ds${0..1}.t_user${0..1}  #数据节点 这里的t_user0\t_user1 这是真实名称
            database-strategy:  #分库策略
              inline:
                sharding-column: city_id
                algorithm-expression: ds${city_id % 2} #按在city_id字段带分表奇数是1数据源,偶数是0数据源
            table-strategy:  #分表策略
              inline:
                shardingColumn: sex
                algorithm-expression: t_user${sex % 2} #按在sex字段带分表奇数是1表,偶数是0表
          t_address:
            key-generator-column-name: id
            actual-data-nodes: ds${0..1}.t_address
            database-strategy:
              inline:
                shardingColumn: lit
                algorithm-expression: ds${lit % 2}
          demo_now:
            key-generator-column-name: id  #主键
            actual-data-nodes: ds${0..1}.demo_now  #数据节点
            database-strategy:  #分库策略
              inline:
                sharding-column: id
                algorithm-expression: ds${id % 2}
        defaultDataSourceName: ds2 #设置默认的数据源,如果没有找到对应的逻辑表的话,就会去这个数据源里面查 这里配置这没分表的数据库 
        
           
  1. pom
<!--还有很多的版本与其他的坐标
	像当当的包
	我直接说 我不会
-->
  		<dependency>
            <groupId>io.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-namespace</artifactId>
            <version>3.0.0</version>
        </dependency>
      
        <!--德鲁伊连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
           
  1. 然后把我分片的表的多表查询改成单表就就ok了

千万注意有分表,有未分表不能使用多表连接查询!!!

会报找不到当前表的异常的

“Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘order1.tabel1’ doesn’t exist”

因为 sharding-jdbc是把多个数据数据源模拟一个数据源,然后按照对应的规则生成sql然后向对应的数据源插入数据

一旦你多表查询他就以为你的两个表都在一个数据库,就gg了

然后如果你的项目之前就只是单数据源的项目的话 这样就OK了 springboot会自动兼容你的配置的,管他是mybatis啊,jpa啊,JDBCtemplate啊,他全都兼容的,因为sharding-jdbc就是在数据源上动的手脚,我管你什么持久层框架总要用到数据源的吧,当是好像还有很多更加复杂的配置 和使用情况 java硬编码的方式配置,多数据源的情况下配置啊 我都不会了,有会的大佬可以教我一下丢个链接什么的 感谢感谢

下面附上官网的连接:

中文的哟

附加: algorithm-expression: table_1${base_id.toLong() % 3} 字符串转long

${}括号里可以加Groovy表达式

继续阅读