动态添加数据源
在开发中,总会有一些业务需要从第三方数据源获取数据,因此需要给用户提供动态添加数据源的功能
通过在网上查阅资料发现spring有一个抽象类AbstractRoutingDataSource,通过实现这个类中的抽象方法determineCurrentLookupKey()可以判断使用的是哪一个数据源。
在AbstractRoutingDataSource类中,可以通过determineTargetDataSource()方法获取数据源,在该方法里又通过determineCurrentLookupKey()方法判断使用哪一个数据源,通过获得的key获取在map中存取的数据源信息。
因为,实现动态数据源时有两种思路:
- 维护一个数据源map,并且重写determineTargetDataSource()方法,从自己维护的map中取出对应的数据源信息;
- 修改AbstractRoutingDataSource类的resolvedDataSources属性,将数据源信息动态地添加进去,但是由于该属性是私有的,只能通过反射来实现。
比较之后,选择的第一种思路,DynamicDataSource类的代码如下:
public class DynamicDataSource extends AbstractRoutingDataSource {
private static Map<String, DataSource> dataSourceMap = new HashMap<>();
private static Map<DataSourceEntity, String> dseMap = new HashMap<>();
private static DataSource