利用Spring、JNDI切换数据源

 利用SpringJNDI切换数据源

 publicclass DataSourceManager extends AbstractRoutingDataSource {

      @Override

      protected Object determineCurrentLookupKey() {

           String key = ContextHolder.getDataSource();// 获取key

           return key;// 返回当前线程实际的DataSource对应的Key

          

      }

}

 

publicclass ContextHolder {

 

      publicstaticfinal ThreadLocal<String> context = new ThreadLocal<String>();

      publicstatic String getDataSource() {

           returncontext.get();

      }    

      publicstaticvoid setDataSource(String dataSource){

           context.set(dataSource);

      }

publicstaticvoid clear() {

           context.remove();

      }

}

 

      <!-- 使用JBOSS jndi resourceRef属性用来指定是否预准备前缀:java:comp/env/,默认false-->

      <bean id="dataSource1" class="org.springframework.jndi.JndiObjectFactoryBean"

            lazy-init="true">

           <property name="jndiName" value="java:TestDb" />

           <property name="resourceRef" value="true" />

      </bean>

     

      <!-- 使用JBOSS jndi-->

      <bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean"

            lazy-init="true">

           <property name="jndiName" value="java:OracleDS" />

           <property name="resourceRef" value="true" />

      </bean>

     

      <!-- JNDI的切换实现切库操作-->

      <bean id="dataSource" class="dynamicDataSource.DataSourceManager">

                 <property name="targetDataSources">

                           <map>

                                       <entry key="mysql" value-ref="dataSource1" />                                                               <entry key="oracle" value-ref="dataSource2" />

                            </map>

                 </property>

                 <property name="defaultTargetDataSource" ref="dataSource1" />

      </bean>

 

切库语句:

ContextHolder.setDataSource("oracle");//默认库为mysql数据库,在此切换为Oracle数据库

 

猜你喜欢

转载自ihyperwin.iteye.com/blog/1455593
今日推荐