2016-08-22 13 views
2

Springバッチ・フレームワークを使用してジョブを作成しようとしています。ジョブは、クラスター化されたDB2データベースからデータを取得し、フェッチされたレコードごとにロジックを呼び出し、変換されたデータを同じデータベース(異なるテーブル)に格納する必要があります。私は、以下のように分散DB2データベースのバッチ・バッチ・リーダー

現在
@Bean 
    public Step step1(StepBuilderFactory stepBuilderFactory, 
      ItemReader<RemittanceVO> reader, ItemWriter<RemittanceClaimVO> writer, 
      ItemProcessor<RemittanceVO, RemittanceClaimVO> processor) { 

     return stepBuilderFactory.get("step1") 
       .<RemittanceVO, RemittanceClaimVO> chunk(100).reader(reader) 
       .processor(processor).writer(writer).build(); 
    } 

step1を記述しようとしています、私はでメタデータのために提供

1.

系SQL、原因データベースがDB2であることと、クラスタ化されることに2つの課題に直面しています - /org/springframework/batch/core/schema-db2.sql 分散DB2ではが機能しません。これはコマンドで失敗します。constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY)

このファイルに書き込まれたクエリは にすることができます。手動でテーブルを作成することもできますが、 は手動でテーブルを作成する必要がありますか?それにはさらに複雑なものがあるでしょうか?

私は、PAUSERESTARTの機能のためにSpringバッチを使いたいので、これらのテーブルがすべて必要です。

2.

我々はREAD ONLY WITH URSO questionでDB2 上のすべてのSELECTクエリを発射する必要があります。 このキーワードでクエリを実行しないと、dbがロックされる可能性があります。

ポイント2の問題点は、このバッチ固有のキーワードをサポートしていないSpring Batch(JdbcPagingItemReaderなど)のビルド済みリーダークラスでは使用できないという点です。

このフレームワークの利点を説明する無用な単純な例を読んで、私は非常に短期間で稼動すると思っていましたが、自分自身のクエリープロバイダクラス、リサーチメタデータsqls、 dbがDB2であり、分散されているとは限りません。

分散Db2データベースで同様の仕事を実装している人は誰ですか?

答えて

0

another questionでテーブルが自動的に削除されず、レクリエーションが不要になることが確認されているので、ポイント1を解決するために手動でテーブルを作成します。一度の手動操作で十分です。

と私はそうSELECTクエリでWITH URが必要とされないトランザクションレベルで分離レベルを指定することで、ポイント#2を解決する、

@Autowired 
    private DataSource dataSource; 
    @Bean 
     public TransactionTemplate transactionTemplateUR(){ 
      TransactionTemplate txnTemplate = new TransactionTemplate(); 
      txnTemplate.setIsolationLevelName("ISOLATION_READ_UNCOMMITTED"); 
      txnTemplate.setTransactionManager(txnManager); 
      return txnTemplate; 
     } 

     @Bean 
     public PlatformTransactionManager txnManager(DataSource dataSource){ 
      DataSourceTransactionManager txnManager = new DataSourceTransactionManager(); 
      txnManager.setDataSource(dataSource); 
      return txnManager; 
     } 
+0

あなたは矛盾を取得しますので、ポイント#2のためのあなたの解決策は、良いではありませんロールバックが発生した場合のデータしたがって、org.springframework.batch.item.database.support.Db2PagingQueryProviderを開始点として使用し、要件に合わせて変更する必要があります。 – Dmitry