之所以有这篇文字是因为官网的垃圾配置说明,导致各种报错 这里参考了两篇文章 加载数据源问题 mybatis 查询返回为空
4.1.1版本yaml 文档配置地址 下面这个是官网的配置说明
dataSources:
ds_master: !!org.apache.commons.dbcp.BasicDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds_master
username: root
password:
ds_slave0: !!org.apache.commons.dbcp.BasicDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds_slave0
username: root
password:
ds_slave1: !!org.apache.commons.dbcp.BasicDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ds_slave1
username: root
password:
masterSlaveRule:
name: ds_ms
masterDataSourceName: ds_master
slaveDataSourceNames:
- ds_slave0
- ds_slave1
props:
sql.show: true
他这个你提供的mysql 的例子,我是oracle 不知道mysql 按他这个会不会报错,没做研究,反正我oracle是有问题的, 问题一,加载数据库时卡住, 先是打印 Loading 0 logic tables’ meta data. 然后就卡主了,过了很长时间 打印出 Loading 1800 tables’ meta data. 加载了我1800个表,一个项目才几个表,加载了我全部的表, 肯定是有问题,只能断点找了, ![在这里插入图片描述](https://img-blog.csdnimg.cn/65700a9160744a168ba132eee8eb61d9.png
到了这里,问题浮出水面了, 其中dataSourceNames 就是咱们配置的数据源对应的就是spring.shardingsphere.datasource.names 配置的数据源名称个数,可以看到如果dataSourceNames 的数量为1,就会将自己作为默认的数据源,如果不为1,才会获取我们用spring.shardingsphere.sharding.default-data-source-name 配置配置的默认数据源。如果我们配置的数据源个数不为1,且没有配置默认数据源的话,就不会走到前面说的SchemaMetaDataLoader.load 方法中,而就不会去加载整个库的表元数据。 但是我配置了两个数据源,还是读取到的一条,原来读取数据源的配置是另外一个,他不是从dataSourceNames 中获取的而是在 master-slave-rules 配置中获取的,需要配置两个规则名称 ,master-data-source-name 指向上面的数据源,如果是一个,他获取的就会是一个,就会走加载所有表的代码
spring:
shardingsphere:
datasource:
names: master,salve
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:xe
username: username
password: password
initial-size: 5
max-active: 5
min-idle: 2
max-wait: 10000
validationQuery: SELECT * from dual
salve:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@localhost:1522:xe
username: username
password: password
initial-size: 5
max-active: 5
min-idle: 2
max-wait: 10000
validationQuery: SELECT * from dual
sharding:
master-slave-rules:
ds0:
master-data-source-name: master
slave-data-source-names:
- salve
ds1:
master-data-source-name: master
slave-data-source-names:
- salve
sharding jdbc 启动和加载配置可以了,但是又出了新的问题,使用mybatisplus 自带的查询时,报错了
Error attempting to get column 'UUID' from result set. Cause: java.sql.SQLFeatureNotSupportedException: getNString ; getNString; nested exception is java.sql.SQLFeatureNotSupportedException: getNString
人生处处都是坑,这里就不贴源码了,之所以报错,是应为,在查询的时候没有自动的将结果映射给ResultMap,如果使用的是mybatisplus 请在实体上加@TableName(value = “”, autoResultMap = true),加上这样的配置 使用mybatis 就不会报错 ,但是自己写的查询语句不能使用 * 号,要写具体的字段,不然会导致查询到的结果为null,mybatis plus 也是一样
备注说明:
配置中如果使用的druid 的数据源,如果使用了,druid-spring-boot-starter 包需要在配置中忽略自动加载,如果使用的不是starter 包,就不需要加这个配置了
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
|