
ShardingJdbc一览
发布日期:2021-05-06 19:58:53
浏览次数:18
分类:技术文章
本文共 3111 字,大约阅读时间需要 10 分钟。
ShardingJdbc一览
更多shardingJdbc内容可以参考官方文档:。关于其他的中间件可以参考之前写的文章:
介绍
ShardingJdbc通过在Java的JDBC层提供额外服务的方式达到分库分表的目的,是Client模式的一个分库分表中间件,据其官网描述,可以完全兼容JDBC和各种ORM框架。
使用
demo是基于Springboot+MyBatisPlus+MySQL进行实现,采用的是水平分表的形式。这里只给了如下几个依赖:
com.alibaba druid-spring-boot-starter 1.1.21 mysql mysql-connector-java 8.0.12 org.apache.shardingsphere sharding-jdbc-spring-boot-starter 4.0.0-RC1 com.baomidou mybatis-plus-boot-starter 3.3.1
- 这里需要事先创建了course_1和course_2两张表。
CREATE TABLE `course_1` ( `id` bigint NOT NULL, `course_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, `create_time` timestamp NULL DEFAULT NULL, `creator` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, PRIMARY KEY (`id`),) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
- 实体类如下:
public class Course { private Long id; private String courseName; private Date createTime; private String creator; }
- Mapper类配置:
@Repositorypublic interface CourseMapper extends BaseMapper{ }
- 具体的ShardingJdbc配置
spring: application: name: sharding-jdbc-demo main: # 允许覆盖重复的bean,默认情况下,单个配置文件中存在id或者name相同的bean定义,spring解析时会报错 allow-bean-definition-overriding: true shardingsphere: datasource: # m1名称可以自己起, 多个数据源的时候需要配置多个名称,即names: m1,m2,m3... names: m1 m1: # 指定连接池, 连接驱动 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver # 这是我的MySQL 8版本的连接地址 url: jdbc:mysql://127.0.0.1:3306/fsn?serverTimezone=GMT%2B8&useSSL=false username: ali password: dpp10078 sharding: tables: test: # 我这里只对course分了两张表 actual-data-nodes: m1.course_$->{ 1..2} # 指定主键生成策略 key-generate-strategy: # 指定主键列 column: id # 指定生成主键的算法 key-generator-name: SNOWFLAKE table-strategy: inline: # 指定用于分表(分片)的列 sharding-column: id # 具体策略是根据奇偶性插入不同表 algorithm-expression: test_$->{ id % 2 + 1} props: sql: # 为true时, 可以把运行时的sql打印出来 show: true
踩到的坑
- java.lang.String.mod() is applicable for argument types: (java.lang.Integer) values: [2]
这里和我一开始设置的主键id类型有关,一开始设置为varchar,实体里也是String类型,但我id又是分片规则指定的列且运算规则如下
algorithm-expression: test_$->{id % 2 + 1}
,此时则id是为Integer类型的,所以报了一个将Integer类型的值设置都String类型的变量上去的错误。
- 第二个是报了一个
allowBeanDefinitionOverriding
相关的异常,并提示如下信息:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
按提示,增加:
allow-bean-definition-overriding: true
这其实因为ShardingJdbc分了表,但对应的实体都是Course,而默认情况下,经由Spring管理时,由于创建出的Bean的名称相同(此条件下不会覆盖),解析报错。
运行流程(待补)
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月21日 03时43分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
华为鸿蒙到底是不是安卓系统套了个壳?
2019-03-03
fragment中recyclerview的重新加载问题
2019-03-03
window程序设计(1):第一个windows程序
2019-03-03
windows程序设计(4):文本输出
2019-03-03
21.2.3总结
2019-03-03
线性代数和数学期望杂题
2019-03-03
【SSL_P2876】2017年东莞市信息学特长生测试题 工程
2019-03-03
【洛谷_P1433】吃奶酪
2019-03-03
volatile关键字和AtomicInteger
2019-03-03
redisTemplate.opsForHash()
2019-03-03
maven生命周期
2019-03-03
方法的绑定机制-静态绑定和动态绑定
2019-03-03
setnx
2019-03-03
Java取绝对值
2019-03-03
线程的start()方法
2019-03-03
编写测试用例的实用小技巧
2019-03-03
c语言贪吃蛇控制台版
2019-03-03
Windows10 下springboot应用无法被外部网络访问
2019-03-03