前言
在使用shrading jdbc实现读写分离的基础上,本篇将介绍自定义配置数据源。读写分离配置可参考我另一篇文章:https://blog.csdn.net/u012786993/article/details/89368423
配置代码参考我的GitHub:https://github.com/hubSKH/sharding-jdbc-demo/tree/pwd_dev
实现步骤
1、关闭sharding jdbc的自动配置
正常情况下,应用sharding jdbc的jar包之后,工程启动sharding会读取配置文件(application.yml等)中对应的数据源配置(根据前缀),然后直接创建数据源。而此时,一些自定义的配置方式会导致SQLException等异常抛出,如以密文的形式配置数据库密码,创建数据源的时候会因为缺失解密操作而抛出“Access denied for user XXX”的SQLException。
所以,在实现自定义配置数据源之前需要关闭sharding jdbc的数据源自动配置。具体做法为:在启动类的@SpringBootApplication的exclude增加io.shardingsphere.jdbc.spring.boot.SpringBootConfiguration类即可。
2、创建数据源配置类
创建类ShardingDataSourceConfig,在类中实现自动以数据源装配,具体实现可参考上一步中关闭自动配置的SpringBootConfiguration类。
然后根据配置前缀,循环读取数据源,创建数据源,本工程使用阿里的druid数据源,所以直接创建DruidDataSource数据源对象,其他使用其他数据源(c3p0,hikari,个人更喜欢使用druid)需要修改数据源对象,或者直接使用数据源接口DataSource。因为工程配置文件中,数据库密码以密文写入,在创建数据源时需要解密操作,通用接口DataSource满足不了自定义配置的操作。
在创建数据源的同时,还可以自定义数据源最大连接、心跳等配置。考虑篇幅有限,数据源的大部分相同,本工程将这些数据源配置放置一起,每个数据源配置一样的参数。
实际开发中,如果数据库的压力不一样的话,则不建议使用这种配置方式,应改为在每个数据源配的配置项中各自配置,然后由DataSourceUtil.getDataSource加载这些配置。不过要注意的是配置项的名称需要与对应数据源的属性相同(相同数据源,版本不同,属性也可能有所改变)。