mysql、imformix动态数据源配置

  因需要语言类型来动态选择对应的数据源,所以把自己处理的过程写下来,以备忘。

  1、把informix数据库驱动放在MAVEN中,在pom.xml中配置,把informix数据库驱动加载到本地

  2、在Tomcat的server.xml配置数据源

     <Resource name="jdbc/InformixDatabase"

        type="javax.sql.DataSource"

        maxIdle="10"

        maxWait="30"

        username="informix"

        password="informix"

        maxActive="100"

        testWhileIdle="true"

        timeBetweenEvictionRunsMillis="60000"

        minEvictableIdleTimeMillis="60000"

        testOnBorrow="true"

        driverClassName="com.informix.jdbc.IfxDriver"

        user="jdbc:informix-sqli://url:host/tradepage2:INFORMIXSERVER=db1_tcp;NEWCODESET=big5,cp1252,819;CONNECTIONRETRYCOUNT=10;CONNECTIONRETRYDELAY=2;LOGINTIMEOUT=2"/>

   3、编写DbContextHolder是获得和设置上下文的类:

       public class DbContextHolder{

          private static final ThreadLocal contextHolder = new ThreadLocal();

          public static void setDbType(String dbType){

             contextHolder.set(dbType);

          }

          public static String getDbType(){

             return (String)contextHolder.get();

          }

          public static void clearDbType(){

             contextHolder.remove();

          }

       }

    4、建立动态数据源类,须继承AbstractRoutingDataSource:

       public class DynamicDataSource extends AbstractRoutingDataSource {

protected Object determineCurrentLookupKey() {

return DbContextHolder.getDbType();

}

}

 5、编写spring配置文件配置多数据源映射关系

   <jee:jndi-lookup id="EN_US" jndi-name="java:comp/env/jdbc/MysqlDatabase"/>

   <jee:jndi-lookup id="ZH_TW" jndi-name="java:comp/env/jdbc/InformixDatabase"/>

 

    <bean id="ttnetDataSource"  class="org.DynamicDataSource">

       <property name="targetDataSources">

          <map key-type="java.lang.String">

            <entry key="EN_US" value-ref="EN_US"/>

            <entry key="ZH_TW" value-ref="ZH_TW"/>

          </map>

       </property>

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

    </bean>

 6、在需要调用的service类中使用如下方式

    if("ZH_TW".equals(lanCode))

       DbContextHolder.setDbType("ZH_TW");

    else

       DbContextHolder.setDbType("EN_US");

猜你喜欢

转载自sailing04.iteye.com/blog/1508474