该系列需要解决的问题:
1.数据源有多个,每次添加一个数据源时,不希望每次都在spring 配置文件中一一配置。
2.由于要做sharding,根据某个field来进行shard到不同的db server上,所以使用哪个数据源是在运行期才能决定。而不是常规的通过配置指定。
3.涉及跨db的事务,因此要支持跨db的transaction。
下面主要列出重点代码, 理解,不要期望简单copy下面代码能work!!!
动态读取数据源取代配置文件中一一配置
1. ShardDataSource 继承与transaction所要求的类
若用spring自带的transaction(org.springframework.jdbc.datasource.DataSourceTransactionManager),可以实现动态数据源的transaction,继承org.apache.commons.dbcp.BasicDataSource 即可
此处因为要用跨db的trasaction, 要求AtomikosDataSourceBean,故ShardDataSource继承该类。
其中poolConfig用于读取pool的相关配置,可以没有,默认atomikos数据池size=1.
/**
* support both spring inject instantiation and common jave bean instantiation
*/
public class