大概23:30
左右,一位不知名的买家找到了我这个不知名的小店,发送了一句亲切的在吗
首先拿到了我们的yaml,因为源码可能不太方便,所以只给了我yml,之后我分析了他的配置,我贴一下核心配置
因为工作中并没有用过sharding去进行分表的操作,所以为了学习就先应承下来了(不是为了单啊啊啊)
根据我的习惯,spring有自带的就先不导入其他依赖,所以我导入了如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
</dependency>
其中就有我们的sharding-jdbc-spring-boot-starter
我们使用的是4.1.1版本
我把他的配置文件复制进来 修改了数据库的信息,然后开始踩坑
首先我没有导入druid
,所以肯定是不指定连接池的,按理来说会使用spring推荐的HikariCP
一把梭哈run起来
妥妥的报错
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration': Initialization of bean failed; nested exception is java.lang.NullPointerException
是有一些报错提示的,但是因为时间有点晚了,我明天补上这个问题
于是我去问客户,客户说能启动,于是我反手导入了客户用连接池
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
加上了
type: com.alibaba.druid.pool.DruidDataSource
启动,正常run了
启动看似正常了,我新增数据
下次我一定截图,主要是小号微信电脑没登录,就懒得切号了
我尝试百度了一下,并没有找到想要的(PS:这个操作太小白了,shard都上了还不会排除,找不到很正常)
对比配置发现,emm,是我修改的问题,逻辑表名没有对应上
启动之后,我新增数据,发现update条数为2,按理来说不应该,于是我启用了sql打印
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
spring:
shardingsphere:
props:
sql:
show: true
然后清晰的看到,执行了两张表的插入
直觉还是配置问题
我删除了用户的
master-slave-rules:
knowChat:
master-data-source-name: db1
slave-data-source-names: db1
这段,因为我并不知道在干嘛,主从?可能影响我运行的全部删掉
启动->开始报错
actual-data-nodes: knowChat.kn_user_$->{0..1}
这次报错提示了,actual-data-nodes解析失败,说是异常的表达式,对照配置发现knowChat这个不能写死,需要使用定义的数据库的名称,放在这里是db1
之后我测试了新增和查询,都正常了,最终配置如下
spring:
shardingsphere:
datasource:
names: db1
db1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test-sharding?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&autoRecon
username: root
password: root
sharding:
#默认的数据源
default-data-source-name: db1
# 分表策略
tables:
# 指定某个表的分片配置
tn_user:
# 规则,使用Groovy语法
# 这个配置是告诉sharding有多少个库和多少个表
# actual-data-nodes: knowChat$->{0..1}.kn_user_$->{0..1}
#这里只分表不分库
logic-table: tn_user
actual-data-nodes: db1.tn_user_$->{0..1}
table-strategy:
inline:
# 配置表分片的字段
sharding-column: order_no
# 配置表分片算法
algorithm-expression: tn_user_$->{order_no % 2}
props:
sql:
show: true
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
交付图如下
不知道啦,配置已经发给客户了,等明有问题给他远程
PS:还没谈价格,应该不会坑吧哈哈
鸡汤来啦
撕一张日历,很简单,但把握住一天,却很难。新的日子定要充实自己,永远记住一句话:自律给我自由。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有