2016-09-22 3 views
0

나는 스프링 프레임 워크를 사용하여 생성 된 응용 프로그램에서 작업하고 있습니다. DAO 구현 클래스에서 우리는 org.springframework.jdbc.core.JdbcTemplate을 사용하여 객체를 만들고 데이터베이스에 연결합니다. 아래 코드가 있습니다. 내가 다른 스키마에있는 다른 테이블에 연결을 원하는단일 클래스의 두 JDBC 템플릿 객체

@Inject 
    @Qualifier("jdbcTemplateServiceATW) 
    private JdbcTemplate jdbcTemplate; 

는 내가 같은 클래스의 다른 JdbcTemplate 개체를 만들 수 있습니다. 그래서 새 JdbcTemplate object이 필요합니다. 두 개의 JdbcTemplate 개의 객체을 아래 표시된 것과 동일한 클래스로 생성 할 수 있습니까?

@Inject 
    @Qualifier("jdbcTemplateServiceATW) 
    private JdbcTemplate jdbcTemplate; 

    @Inject 
    @Qualifier("jdbcTemplateServiceDLW") 
    private JdbcTemplate jdbcTemplateMyLoans; 
+0

http://www.baeldung.com/spring-data-jpa-multiple-databases – sidgate

+0

당신이 시도 할 때 무슨 일이? –

답변

0

당신은 클래스의 봄 구성 콩의 수를 가질 수 있지만, 당신은 두 개의 데이터베이스에서 데이터를 원하는 경우, 당신은 두 개의 서로 다른 데이터 소스 객체로 구성된 두 가지의 JdbcTemplate 클래스가 있어야합니다. 또한 클래스가 아닌 이름으로 bean을 autowires하는 annotation @Resource을 사용할 수 있습니다. 예를 들어

:

@Resource 
JdbcTemplate jdbcTemplateServiceATW; 
@Resource 
JdbcTemplate jdbcTemplateServiceDLW; 
1

다음과 같이 당신이 할 수있는 2 JdbcTemplates를 사용하여 2 개의 다른 데이터베이스와 작업 할 경우

구성은 데이터 소스, JdbcTemplates 및 TransactionManagers는 다음과 같이

<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"></property> 
    <property name="url" value="${node1.jdbc.url}"></property> 
    <property name="username" value="${node1.jdbc.username}"></property> 
    <property name="password" value="${node1.jdbc.password}"></property> 
</bean> 

<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"></property> 
    <property name="url" value="${node2.jdbc.url}"></property> 
    <property name="username" value="${node2.jdbc.username}"></property> 
    <property name="password" value="${node2.jdbc.password}"></property> 
</bean> 

<bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSource1"></property> 
</bean> 

<bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSource2"></property> 
</bean> 

<tx:annotation-driven transaction-manager="txnManager1"/> 
<tx:annotation-driven transaction-manager="txnManager2"/> 

<bean id="txnManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource1" /> 
</bean> 

<bean id="txnManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource2" /> 
</bean> 

여러 개의 JdbcTemplate을 삽입하여 사용할 수 있지만 올바른 TransactionM을 선언해야합니다. anager는 사용중인 JdbcTemplate을 기반으로 @Transactional과 함께 사용합니다.

@Service 
public class MyService 
{ 
    @Autowired 
    @Qualifier("jdbcTemplate1") 
    private JdbcTemplate jdbcTemplate1; 

    @Autowired 
    @Qualifier("jdbcTemplate2") 
    private JdbcTemplate jdbcTemplate2; 

    @Transactional("txnManager1") 
    public void method1() 
    { 
     //do something with jdbcTemplate1 
    } 

    @Transactional("txnManager2") 
    public void method2() 
    { 
     //do something with jdbcTemplate2 
    } 
} 
+0

데이터베이스 테이블에 액세스 할 수 없습니다. 예외를 다음과 같이 표시 : 중첩 예외는 java.sql.SQLException입니다. ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다. – javaUser