2016-09-22 9 views
0

私は、Springフレームワークを使用して作成されたアプリケーションに取り組んでいます。 DAO実装クラスでは、org.springframework.jdbc.core.JdbcTemplateを使用してオブジェクトを作成し、データベースに接続しています.Belowはコードです。単一クラスの2つのJDBCテンプレートオブジェクト

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

私は別のスキーマ内にある他のテーブルに接続したいと私は同じクラスに別のJdbcTemplateオブジェクトを作成することができます。だから私は新しいJdbcTemplate objectが必要です。 2つの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

あなたはクラスで構成された春の豆の任意の番号を持つことができますが、2つのデータベースからのデータが必要な場合は、次の2つの異なるDataSourceオブジェクトで構成された2つのJdbcTemplateクラスを持っている必要があります。 さらに、クラスではなく名前でBeanをオートワイヤする注釈@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を宣言する必要がありますあなたが使用しているJdbcTemplateに基づいて@Transactionalで使用するanagerです。

@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

関連する問題