2014-01-12 4 views
0

오라클 다중 사용자 공간 연결에 spring ibatis를 사용합니다.spring3 ibatis2.x 다중 데이터 소스

사용자 A, 사용자 B, 사용자 시스템처럼 보입니다.

사용자 시스템은 항상 사용됩니다. 다른 사용자 동안 작업 (스레드)에서 opration

spring.xml 다오에서

<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> 

:

public class BaseDao extends SqlMapClientDaoSupport { 
Logger log = Logger.getLogger(getClass()); 

@Resource(name = "sqlMapClient") 
private SqlMapClient sqlMapClient; 


@PostConstruct 
public void initSqlMapClient() { 
    super.setSqlMapClient(sqlMapClient); 
} 
    } 

    public class UserDao extends BaseDao { 
     public void test() 
     { 
      this.getSqlMapClientTemplate().queryForObject("...."); 
     } 
    } 

작업 : 내가 다른 datasorce을 opration 할 taskJob에. 그것을 구현하는 방법?

public class TaskJob { 

      //@Autowired 
      //UserDao userDao; 
      public void test(){ 
       //to get other sqlmapclient in UserDao 
       userDao.test();//for User A,User B,User .... 
      } 

} 

답변

1

당신은 그 사용 SqlMapClientDaoSupport 할 수 없습니다. SqlMapClientDaoSupport를 사용하지 않으시려면 다음 해결책으로 충분합니다.

MapClientFactoryBean는

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
    <property name="configLocation" value="classpath:SqlMapConfig.xml" /> 
</bean> 

두 UserDAO를 가지고 데이터 소스 (각 데이터 소스에 대한 하나의)

<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> 

은 자세한 내용

을 couldnt 코드 나 자신을 테스트 http://www.mail-archive.com/[email protected]/msg04432.html 여기를 참조하십시오 없어야합니다. 시도해보십시오.

+0

감사합니다. 그러나이 솔루션은 너무 많은 문제가 있습니다. 오라클 사용자가 많이 있습니다.이 사용자를 스레드에서 순환시켜야합니다. – zt9788

+0

SqlMapClientDaoSupport는 단 하나의 SqlMapClient를 지원하도록 설계되었습니다. 기존 코드로 무엇이든 할 수 있습니다 .. – ArunM

+0

다음과 같이 스프링 (aop)을 사용하지 않고 직접 DataSource를 만들 수 있습니까 : for (DataSource dt ...) (새 UserDao() .set (dt);) – zt9788