在tomcat中的context.xml文件中配置多个数据源。
例如:
<Resource
name="jdbc/zlxt0"
type="javax.sql.DataSource"
password="bpms"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxIdle="5"
maxWait="5000"
username="bpms"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
maxActive="100"/>
<Resource
name="jdbc/zlxt1"
type="javax.sql.DataSource"
password="bpms1"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxIdle="5"
maxWait="5000"
username="bpms1"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
maxActive="100"/>
<Resource
name="jdbc/zlxt2"
type="javax.sql.DataSource"
password="czwd0216"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxIdle="5"
maxWait="5000"
username="czwd0216"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
maxActive="100"/>
2、在spring的配置文件applicationContext.xml中配置多个jndi,并配置数据源.
例如:
<jee:jndi-lookup id="ds0" jndi-name="java:comp/env/jdbc/zlxt0"/>
<jee:jndi-lookup id="ds1" jndi-name="java:comp/env/jdbc/zlxt1"/>
<jee:jndi-lookup id="ds2" jndi-name="java:comp/env/jdbc/zlxt2"/>
// 下文中 class="app.util.mulds.DynamicDataSource"> 是扩展的处理类(参见步骤3)
<bean id="dataSource" class="app.util.mulds.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="0" value-ref="ds0"/>
<entry key="1" value-ref="ds1"/>
<entry key="2" value-ref="ds2"/>
</map>
</property>
<property name="defaultTargetDataSource" ref="ds1"/>
</bean>
3、步骤2中的DynamicDataSource类的具体的实现
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DBContextHolder.getDsKey();
}
}
4、步骤3中的DBContextHolder类的实现
public class DBContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal();
public static void setDsKey(String dsKey){
contextHolder.set(dsKey);
}
public static String getDsKey(){
return (String)contextHolder.get();
}
}
5、在BO层中的新添加如下2行代码(如果不添加这2行代码,则程序调用时默认数据源)
// ChangeDsImpl1 是给开发人员进行业务扩展用的,即开发人员可以实现业务规则判断调用哪个数据源的代码地方(如果该方法需要添加参数,开发人员可任意修改)
ChangeDsImpl1 changeDsImpl1 = new ChangeDsImpl1();
//将业务处理规则判断出的数据源用于这次处理。
DBContextHolder.setDsKey(changeDsImpl1.getDsKey());
6、类ChangeDsImpl1<!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]-->
public class ChangeDsImpl1 {
@根据参数返回数据源的Key
public String getDsKey(String... parms) {
return "2";
}
}
7、文档中涉及到的代码对应的文件都在附件中,可以参考