AbstractRoutingDataSource是一个动态的数据源,也就是说可以在多个数据源之间进行路由,首先要承认他就是一个数据源,这点可以从他的继承结构上看出:
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return "keyDataSource1";
}
}
Spring中配置
<bean id="dynamicDataSource" class="cn.test.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="keyDataSource0" value-ref="dataSource0" />
<entry key="keyDataSource1" value-ref="dataSource1" />
<entry key="keyDataSource2" value-ref="dataSource2" />
<entry key="keyDataSource3" value-ref="dataSource3" />
<entry key="keyDataSource4" value-ref="dataSource4" />
<entry key="keyDataSource5" value-ref="dataSource5" />
<entry key="keyDataSource6" value-ref="dataSource6" />
<entry key="keyDataSource7" value-ref="dataSource7" />
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource0" />
</bean>
这样每次获取数据库连接的时候,就会通过AbstractRoutingDataSource这个代理先处理,会回调你继承AbstractRoutingDataSource类中的方法取到相应的key,然后寻找配置里对应的DataSource去获取连接,这样就实现了数据源的动态切换,所以重点还是如何实现determineCurrentLookupKey()这个方法上。