6

私は2つの異なるデータソースを持っています.1つは読み取り用で、もう1つは以下のような結果を書き込むためのものです:

  • ItemReader は dataSource_1 からデータを取得する必要があります。
  • ItemWriter は dataSource_2 にデータを書き込む必要があります。

リーダーとライターが同じタスクレットにあることがわかっています。

ドキュメントに従って、タスクレットで単一のトランザクションマネージャーを構成できます

このシナリオでは、ここでトランザクション マネージャーをどのように使用しますか?

コンテナーに頼ることができず、ORM レイヤー (JPA ..) を使用していないため、直接 JDBC ドライバーを使用してデータベース 1 を読み取り、データベース 2 に書き込みます。

現在の設定:

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

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

<bean id="baseReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
        <property name="dataSource" ref="dataSource1" />
</bean>

<bean id="baseWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
        <property name="dataSource2" ref="dataSource2" />
        <property name="sql" value="${batch.param.insert}" />
</bean>

Spring Batch で JTA/XA トランザクション ( Atomikos ) を構成するにはどうすればよいですか?

4

3 に答える 3

2

JTA トランザクション マネージャーを使用して、2 つのデータ ソースに XA 互換ドライバーを使用する必要があります。

分散トランザクションに慣れていない場合は、この記事とこの記事を参照してください

よろしく

于 2013-05-29T15:35:39.497 に答える
1

リーダーがトランザクションの外部にいる可能性がある場合は、ライターの trx マネージャーのみを使用できます。同じトランザクションでリーダーとライターが必要な場合は、おそらく XA 互換のトランザクション マネージャーが必要です。

于 2013-05-29T23:56:45.077 に答える
0

Spring Batch は忘れてください。

1 つの datasource1 から読み取り、datasource2 に書き込むアプリケーション サービスを作成する必要があると仮定すると、何をする必要があるでしょうか?

分散トランザクションがその答えです。もちろん、それには追加の構成が含まれます。J2EE コンテナー (Websphere、Weblogic、JBoss など) を使用している場合、それらが提供するトランザクション マネージャーは分散トランザクションを処理できる必要があります。これらのプラットフォームごとに、Spring で対応する TransactionManager 実装を見つけることができるはずです。必要なのは、XA 対応ドライバーを使用するようにデータソース (コンテナーの下にもある必要があります) を構成することだけです。アプリでは、対応するトランザクション マネージャーを使用し、JNDI によって XA 対応データソースをルックアップします。

ただし、コンテナーに依存できない場合 (たとえば、スタンドアロン アプリを作成している場合など)、それが可能なトランザクション マネージャーを見つける必要があります。 Atomikosは、最も有名な無料の JTA/XA ライブラリの 1 つです。

もちろん、すべてのトランザクション対応アクションが datasource2 にあると 100% 確信している場合は、datasource2 だけにデータソース トランザクション マネージャーを使用することを検討できますが、正直なところ、推奨されるアプローチではありません。

于 2013-05-30T01:34:43.947 に答える