sharding jdbc 4.1.1 版本 集成 oracle 做读写分离,遇到的各种问题

之所以有这篇文字是因为sharding jdbc 对mysql 支持友好,对于oracle 并不友好,会导致各种报错,可是领导就是要用
这里参考了两篇文章
加载数据源问题
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个表,一个项目才几个表,加载了我全部的表, 肯定是有问题,只能断点找了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到了这里,问题浮出水面了,
其中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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值