Spring 实现多数据源并且动态增加数据源

项目需求:服务器上有多个客户,并各自有自己的数据源,切随时有新客户进驻服务器

这就需要Spring事务管理多个数据源,切数据源不确定,数量也不确定。

项目用 Spring3+Mybatis3实现。

起初考虑用 Spring 的 AbstractRoutingDataSource 实现数据源切换,能切换但不能动态改变数据库,初始化完成后就不能动了。

设想,如果Spring的事务不关心AbstractRoutingDataSource里数据源的变动,那可以直接实现一个和AbstractRoutingDataSource功能相仿,并且能动态改动数据源的 AbstractRoutingDataSource。看看行不行

————————实施———————-

自己构建一个 AbstractRoutingDataSource (名字和Spring提供的一样)

Spring 继承了 AbstractDataSource并实现接口InitializingBean

实现接口InitializingBean其实是为了把用户设置进去的 datasource 的Map转换成自己的Map。所以才导致 后面再设置 DataSource Map 不能生效

那我们现在就写一个 AbstractRoutingDataSource ,也继承 AbstractDataSource,但是不用实现InitializingBean了,而后再自己实现的AbstractRoutingDataSource的子类里去实现InitializingBean

AbstractRoutingDataSource
AbstractRoutingDataSource

 

———————测试结果———————————-

可行,事务正常,不过使用会有一定的不安全风险。

发表回复