日期:2014-05-16 浏览次数:20823 次
? 因需要语言类型来动态选择对应的数据源,所以把自己处理的过程写下来,以备忘。
? 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 CustomerContextHolder.getCustomerType();
}
}
?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");
?