一、项目相关依赖
springboot3.2.5 + mybatis3.0.3 + shardingsphere-jdbc5.2.1 + druid1.2.22
二、出现问题:
在使用中发现分表配置没有生效,因为数据库存在和逻辑表名相同的物理表,所以没有及时发现这个问题。
三、解决过程:
1、发现分表配置未生效(即逻辑表user_info未映射到物理表user_info_1上),怀疑是配置出错,所以将springboot启动日志改为debug,观察shardingsphere的配置加载情况,发现了以下信息:
果然是配置文件的问题,然后发现YamlShardingRuleSpringBootConfiguration里的配置路径是:
最后发现yaml配置文件中少了rules这一层级。
2、修改配置后重启,又报错:java.lang.IllegalArgumentException: Type is required
从源码中发现该错误是无法从配置文件中读取到属性:spring.shardingsphere.rules.sharding.sharding-algorithms.one_user_info_inline.type
但是又能通过以下前置判断条件,说明已经正常读取到配置
最后发现是因为配置文件中采用了驼峰命名引起的问题(如上图,程序中会自动转化为中划线连接)
PropertyUtil.containPropertyPrefix(environment, prefix)) 能够正确判断驼峰命名的配置
String type = environment.getProperty(key) 不能正确获取到驼峰命名的配置项(key已经转化为中划线连接)
最后将配置文件全部改为中划线即可解决该问题。