引言
过年的时候做过一个很简单的动态数据源的模块,给公司的一个新项目使用了,同时公司另外一个项目也参考了我做的动态数据源的设计,目前大家对我做的这个模块还是比较认可的,但是也存在一些问题:
-
对 load blance 的支持不够
在先期设计的时候没有考虑集群的情况,导致存储在数据库的数据源信息的状态等信息一旦被其中一台机器修改,其他的机器就不能知晓这条数据被修改过。目前的解决方案是当一台机器修改数据的时候把修改的数据放在redis,另外一台机器先去读取redis中的数据,然后再去看数据库中的数据,其缺点就是就只能两台机器在跑了
-
对动态修改、删除和添加新的数据源信息不友好
目前动态数据源的信息都是存在数据库中,如果要修改、删除和添加数据源信息,那么将通过job定期调整,但是如果需要紧急调整数据源信息,只能重启
-
扩展性不太好
举个例子,我写的动态数据源使用了Hikaricp,如果其他项目使用了其他数据源框架,那么想要改起来比较麻烦。
想法
我希望可以设计一套动态数据源模块,可以更好的适用于现有的项目,同时可以轻松将来的扩展,帮助到别人。
我希望可以做到:
- 很好的支持不同的数据源框架,主要是C3P0和Hikaricp(项目中主要使用这两个)
- 很好支持多台机器部署的情况
- 提供一套很好的UI模板去辅助后端开发人员去开发一套系统运维人员修改、删除和添加数据源信息
- 尽可能去降低Spring框架的依赖(目前还是直接使用Spring Boot的技术做扩展吧)
- 。。。(等项目遇到了在加)
而我不想做到的是:
- 支持事务,动态数据源的事务管理真的很难,涉及到的数据源越多,难度越大,超过了我的能力
- 最低支持Java8,不想兼容Java8以下的版本,但是应该尽可能方便别人通过魔改代码去支持Jdk8以下的版本
- 半途而废
那么现在我想做到的是:在Spring Boot2的基础上实现动态数据源,同时可以支持至少三台机器部署的情况
总结
未来很美好,只是需要我们去脚踏实地。