AbstractRoutingDataSource
/* */ public Connection getConnection()
/* */ throws SQLException
/* */ {
/* 133 */ return determineTargetDataSource().getConnection();
/* */ }
/* */
/* */ public Connection getConnection(String username, String password) throws SQLException {
/* 137 */ return determineTargetDataSource().getConnection(username, password);
/* */ }
/* */ protected DataSource determineTargetDataSource()
/* */ {
/* 149 */ Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
/* 150 */ Object lookupKey = determineCurrentLookupKey();
/* 151 */ DataSource dataSource = (DataSource)this.resolvedDataSources.get(lookupKey);
/* 152 */ if (dataSource == null) {
/* 153 */ dataSource = this.resolvedDefaultDataSource;
/* */ }
/* 155 */ if (dataSource == null) {
/* 156 */ throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");
/* */ }
/* 158 */ return dataSource;
/* */ }
public class DynamicDataSource extends AbstractRoutingDataSource {
// private static final Log logger = LogFactory.getLog(DynamicDataSource.class);
@Override
protected Object determineCurrentLookupKey() {
System.out.println(DataSourceTypeManager.get());
return DataSourceTypeManager.get();
}
}
转自:
1、http://blog.csdn.net/alaahong/article/details/8707915
2、http://blog.sina.com.cn/s/blog_6b2a34c50102uylo.html
3、https://my.oschina.net/u/2380961/blog/712956
4、http://www.ithao123.cn/content-2984670.html
备注:参考文献3在测试过程中,发现数据源无法动态切换,原因为代码中定义的枚举类型。参考4,将枚举转换为String,问题解决。