项目需求:服务器上有多个客户,并各自有自己的数据源,切随时有新客户进驻服务器
这就需要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

———————测试结果———————————-
可行,事务正常,不过使用会有一定的不安全风险。