因需要语言类型来动态选择对应的数据源,所以把自己处理的过程写下来,以备忘。
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");