Spring 2.0以后有了AbstractRoutingDataSource 抽象类

里面有两个核心方法

determineTargetDataSource()
determineCurrentLookupKey()

所有的待切换的数据源都存在map中,所以切哪个目标数据源targetDataSource,要看能够lookup到哪个key。

自定义一个DynamicDataSource AbstractRoutingDataSource  然后实现determineCurrentLookupKey()这个方法,这个方法返回哪个key对应的dataSource,你就访问到了哪个数据源。

 

Spring配置里

先配置好dataSource,dataSourceRead和dataSourceWrite

<bean id="dynamicDataSource" class="com.goglezon.dao.DynamicDataSource">  
   <property name="targetDataSources">     
      <map key-type="java.lang.String">     
         <entry key="read" value-ref="dataSourceRead"/>     
         <entry key="write" value-ref="dataSourceWrite"/>     
      </map>     
   </property>     
   <property name="defaultTargetDataSource" ref="dataSource"/>    
</bean> 

Got it。