Java spring3 ibatis2.x多数据源
我使用SpringiBATIS连接Oracle多用户空间 看起来像是用户A,用户B,用户系统 始终使用用户系统。在任务(线程)中操作时的其他用户 spring.xmlJava spring3 ibatis2.x多数据源,java,oracle,spring-mvc,datasource,ibatis,Java,Oracle,Spring Mvc,Datasource,Ibatis,我使用SpringiBATIS连接Oracle多用户空间 看起来像是用户A,用户B,用户系统 始终使用用户系统。在任务(线程)中操作时的其他用户 spring.xml <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassN
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="System" />
<property name="password" value="system" />
</bean>
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="A" />
<property name="password" value="a" />
</bean>
<bean id="dataSource3" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="B" />
<property name="password" value="b" />
</bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlMapClient1" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource2" />
</bean>
<bean id="sqlMapClient2" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource3" />
</bean>
任务:在taskJob中,我想操作其他数据源。如何实施?
public class TaskJob {
//@Autowired
//UserDao userDao;
public void test(){
//to get other sqlmapclient in UserDao
userDao.test();//for User A,User B,User ....
}
}
使用SqlMapClientDaoSupport无法做到这一点。如果您确定不使用SqlMapClientDaoSupport,那么以下解决方案就足够了 MapClientFactoryBean不应具有数据源
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
</bean>
有两个UserDAO(每个数据源一个)
请参阅此处了解更多详细信息
我自己无法测试代码。请尝试。谢谢,但是这个解决方案太麻烦了。有更简单的方法吗?Oracle用户很多。我需要在线程中循环这些用户SqlMapClientDaoSupport设计为只支持一个SqlMapClient。。所以我真的怀疑你是否可以用现有的代码做任何事情..我可以自己创建数据源而不使用spring(aop),比如:for(DataSource dt…(new UserDao().set(dt);)
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
</bean>
<bean id = "userDAO" class = "com.xxxx.UserDAO">
<property name="dataSource" ref="dataSource" />
<property name="sqlMapClient" ref = "sqlMapClient">
<bean id = "userDAO1" class = "com.xxxx.UserDAO">
<property name="dataSource2" ref="dataSource" />
<property name="sqlMapClient" ref = "sqlMapClient">
</bean>