大概是这样子的一个情况: 我在一个方法里面首先需要连接到一个局方库,然后获取数据封装在一个list里面,然后遍历list的时候,我需要切换数据源把数据保存到另外一个库里面,调用了一个writerLog方法,在该方法之前调用了:CurrentContextHolder.setDateSource("gjdx"); 但是没有切换过来,大概代码如下,在线求解!采用的是spring3.0.5和ibatis2.3 大概spring配置如下,我配置了两个数据源,默认为zxinDataSource这个数据源:<bean id="parentDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="initialSize" value="${initialSize}" />
<property name="maxActive" value="${maxActive}" />
<property name="maxIdle" value="${maxIdle}" />
<property name="minIdle" value="${minIdle}" />
</bean> <bean id="zxinDataSource" parent="parentDataSource">
<property name="url" value="${zxin_url}" />
<property name="username" value="${zxin_username}" />
<property name="password" value="${zxin_password}" />
</bean>
<bean id="gjdxDataSource" parent="parentDataSource">
<property name="url" value="${gjdx_url}" />
<property name="username" value="${gjdx_username}" />
<property name="password" value="${gjdx_password}" />
</bean> <bean id="dataSource" class="com.xxx.pub.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="zxin" value-ref="zxinDataSource" />
<entry key="gjdx" value-ref="gjdxDataSource" />
</map>
</property>
<property name="defaultTargetDataSource" ref="zxinDataSource"/>
</bean> <!-- 配置ibatis -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
.........................
public class CurrentContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setDateSource(String dateSourceName) {
contextHolder.set(dateSourceName);
} public static String getDateSource() {
return (String)contextHolder.get();
} public static void clearDateSource() {
contextHolder.remove();
}
}
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource{ @Override
protected Object determineCurrentLookupKey() {
return CurrentContextHolder.getDateSource();
}
}
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="initialSize" value="${initialSize}" />
<property name="maxActive" value="${maxActive}" />
<property name="maxIdle" value="${maxIdle}" />
<property name="minIdle" value="${minIdle}" />
</bean> <bean id="zxinDataSource" parent="parentDataSource">
<property name="url" value="${zxin_url}" />
<property name="username" value="${zxin_username}" />
<property name="password" value="${zxin_password}" />
</bean>
<bean id="gjdxDataSource" parent="parentDataSource">
<property name="url" value="${gjdx_url}" />
<property name="username" value="${gjdx_username}" />
<property name="password" value="${gjdx_password}" />
</bean> <bean id="dataSource" class="com.xxx.pub.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="zxin" value-ref="zxinDataSource" />
<entry key="gjdx" value-ref="gjdxDataSource" />
</map>
</property>
<property name="defaultTargetDataSource" ref="zxinDataSource"/>
</bean> <!-- 配置ibatis -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
.........................
public class CurrentContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setDateSource(String dateSourceName) {
contextHolder.set(dateSourceName);
} public static String getDateSource() {
return (String)contextHolder.get();
} public static void clearDateSource() {
contextHolder.remove();
}
}
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource{ @Override
protected Object determineCurrentLookupKey() {
return CurrentContextHolder.getDateSource();
}
}
例如sqlMapClientzxin sqlMapClientgidx我们一个项目就是这么做的
然后在程序里传参确定是用哪个sqlMapClient 同时也请你帮我看看这个贴 EJB3.1的定时任务为什么总是不运行?
我以前从来没用过ejb
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@333.333.333.333:1521:vsopd</value>
</property>
<property name="username" value="dep" />
<property name="password" value="dep" />
</bean>
<bean id="crm2"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@33.33.33.33:1521:ods2</value>
</property>
<property name="username" value="crm" />
<property name="password" value="crm" />
</bean>
<bean id="crm1"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@33.33.33.33:1521:ods1</value>
</property>
<property name="username" value="crm" />
<property name="password" value="crm" />
</bean> <!-- iBatis config -->
<bean id="sqlMapClientDep" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap-config.xml" />
<property name="dataSource" ref="dep" />
<property name="lobHandler" ref="oracleLobHandler" />
</bean>
<bean id="sqlMapClientCrm1" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap-config.xml" />
<property name="dataSource" ref="crm1" />
<property name="lobHandler" ref="oracleLobHandler" />
</bean>
<bean id="sqlMapClientCrm2" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap-config.xml" />
<property name="dataSource" ref="crm2" />
<property name="lobHandler" ref="oracleLobHandler" />
</bean>电信crm域里的一个项目 ip被我改了
你可以看看这个例子
http://qdjinxin.iteye.com/blog/364572
实践过 没问题