Spring Batchはデータベースから一度読み取り、別のデータベースに書き込み、CSVに書き込みます

ユ・チェン

私はSpringBatchを初めて使用し、バッチジョブを実装しようとしています。

  1. MySQLデータベースから読み取る
  2. 結果をCSVファイルに書き込む
  3. MySQL結果セットの処理を実行し、別のデータベースに書き込みます。

StackOverflowこの質問を調べましたが、受け入れられた主な答えは、基本的に、データベースから2回読み取る2つのステップを実装することでした。

<job id="myJob">
    <step id="step1" next="step2">
        <tasklet>
            <chunk reader="reader" writer="typeAwriter"/>
        </tasklet>
    </step>
    <step id="step2">
        <tasklet>
            <chunk reader="reader" processor="processor" writer="typeBwriter"/>
        </tasklet>
    </step>
</job>

MySQLデータベースから2回読み取るよりも効率的な方法はありませんか?たとえば、クエリが非常に大きく、システムパフォーマンスを低下させた場合はどうなりますか?

ユ・チェン

先に進んで、自分の質問に答えます。これを行うには複数の方法がありますが、最初にプロパティとオブジェクトをに保存し、ステップの完了後にStepExecutionContextそれらを昇格させるとJobExecutionContextうまくいくことがわかりましたまた、ここでかなり徹底的に文書化されています。

ステップ1:

ライター/リーダーでプライベートを宣言しStepExecutionます。次に、読み取り/書き込みメソッド内でステップコンテキストを作成し、データをキーと値のペアとして配置します。

ExecutionContext stepContext = this.stepExecution.getExecutionContext();
stepContext.put("someKey", someObject);

ステップ2:ExecutionContextPromotionListenerステップのBean構成にを追加します。ExecutionContextPromotionListener含まれている必要がありますString[]から、この実装に似て、あなたのステップを超えて仕事の範囲を促進したいキー、含まキーと呼ばれるプロパティのLinkedInの記事を

@Bean
public ExecutionContextPromotionListener promotionListener() {
    ExecutionContextPromotionListener listener = new ExecutionContextPromotionListener();
    listener.setKeys( new String[] { "entityRef" } );
    return listener;
}

ステップ3:ステップを実行する前に、StepExecutionをライターに追加する必要もあります。

@BeforeStep
public void saveStepExecution( StepExecution stepExecution ) {
    this.stepExecution = stepExecution;
} 

ステップ4:これにより、write()メソッドがstepExecutionインスタンスにアクセスできるようstepContextになり、データを保存するためにアクセスできるようになります。たとえば、あなたは書くことができます

write() {
    ... // write logic

    ExecutionContext stepContext = this.stepExecution.getExecutionContext();
    stepContext.put("keyYouWantToPutIn", theCorrespondingDataObject);
}

最後に、次のステップで、このデータを取得できます(Spring Batchのドキュメントから直接取得した例

@BeforeStep
public void retrieveInterstepData(StepExecution stepExecution) {
    JobExecution jobExecution = stepExecution.getJobExecution();
    ExecutionContext jobContext = jobExecution.getExecutionContext();
    this.someObject = jobContext.get("someKey");
}

この時間は、しかし、予告それからアクセスされているということjobContextとは対照的に、stepContext-それが推進されています!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Spring Batch Boot-CSVからデータを読み取りながら、ステータスコードに基づいて複数の場所にデータを書き込みますか?

分類Dev

あるデータソースからオブジェクトを読み取り、Springデータを使用して別のデータソースに書き込むにはどうすればよいですか?

分類Dev

Spring / Hibernateの読み取り専用データベーストランザクションの実行が読み取り/書き込みよりも遅いのはなぜですか?

分類Dev

Spring Batch-1つのテーブルから読み取り、2つの異なるテーブルにデータを書き込む方法

分類Dev

Springのデータベースからのエンティティの書き込みロック

分類Dev

Spring Bootから起動すると、Pythonスクリプトがデータベースに書き込みません

分類Dev

Springの単一のトランザクション内で複数のデータソース(1つは読み取り用、もう1つは書き込み用)を使用するにはどうすればよいですか?

分類Dev

Spring Batchパーティショニングマスターはデータベースを読み取り、データをワーカーに渡すことができますか?

分類Dev

Spring Boot-データベースタイプNONEの組み込みデータベースドライバークラスを判別できません

分類Dev

Spring / JPAを使用したPostgresデータベースのJSON列への書き込み

分類Dev

Spring Boot:データベースタイプNONEの組み込みデータベースドライバクラスを判別できません

分類Dev

サーブレット3.1(読み取り|書き込み)リスナーはSpring 4のDeferredResultでサポートされていますか?

分類Dev

Springは組み込みデータベーススクリプトでAOPを使用できません

分類Dev

Springの組み込みMongoDBデータベースはメモリのみですか?

分類Dev

Spring Boot Logging HTTPリクエストとレスポンス、およびSQLデータベースへのログの書き込み

分類Dev

Spring Boot の Redis でデータベース タイプ NONE の組み込みデータベース ドライバー クラスを特定できない

分類Dev

何が速いですか?SQLデータベースの読み取り/書き込みまたはファイルの読み取り/書き込み?

分類Dev

phpmyadminデータベースの読み取りと書き込みに優れていますか?

分類Dev

Spring sftpは、ローカルディレクトリなしでリモートで読み取りおよび書き込みを行います

分類Dev

Spring MailIntegrationでIMAPFolder読み取り/書き込みモードを有効にする方法

分類Dev

Spring-Batchを使用して、univocityによって返されたアイテムのリストをデータベースに書き込む方法

分類Dev

PHPはXMLを読み取り、データベースに書き込みます

分類Dev

Spring Batch:カスタムバッチサイズを使用してデータベーステーブルにリストを書き込む

分類Dev

組み込みデータベースを無効にする方法Spring-bootspring-data-jpa

分類Dev

メタデータに埋め込みデータベースを使用し、他のデータに2番目のデータベースを使用するJava Spring Batch

分類Dev

csvからの読み取りまたはcsvへの書き込み中にデータフレームのデータ型「リスト」を保持する方法

分類Dev

JdbcBatchItemWriterを使用して、REST APIから読み取り、1回の読み取りで複数のレコードを単一のDBテーブルに書き込むSpringバッチのコード

分類Dev

DBからデータを取得するテストをSpringブートREST APIに書き込む

分類Dev

Springの外部でFlatFileItemWriterを単体テストする-「書き込み前にライターを開く必要があります」例外

Related 関連記事

  1. 1

    Spring Batch Boot-CSVからデータを読み取りながら、ステータスコードに基づいて複数の場所にデータを書き込みますか?

  2. 2

    あるデータソースからオブジェクトを読み取り、Springデータを使用して別のデータソースに書き込むにはどうすればよいですか?

  3. 3

    Spring / Hibernateの読み取り専用データベーストランザクションの実行が読み取り/書き込みよりも遅いのはなぜですか?

  4. 4

    Spring Batch-1つのテーブルから読み取り、2つの異なるテーブルにデータを書き込む方法

  5. 5

    Springのデータベースからのエンティティの書き込みロック

  6. 6

    Spring Bootから起動すると、Pythonスクリプトがデータベースに書き込みません

  7. 7

    Springの単一のトランザクション内で複数のデータソース(1つは読み取り用、もう1つは書き込み用)を使用するにはどうすればよいですか?

  8. 8

    Spring Batchパーティショニングマスターはデータベースを読み取り、データをワーカーに渡すことができますか?

  9. 9

    Spring Boot-データベースタイプNONEの組み込みデータベースドライバークラスを判別できません

  10. 10

    Spring / JPAを使用したPostgresデータベースのJSON列への書き込み

  11. 11

    Spring Boot:データベースタイプNONEの組み込みデータベースドライバクラスを判別できません

  12. 12

    サーブレット3.1(読み取り|書き込み)リスナーはSpring 4のDeferredResultでサポートされていますか?

  13. 13

    Springは組み込みデータベーススクリプトでAOPを使用できません

  14. 14

    Springの組み込みMongoDBデータベースはメモリのみですか?

  15. 15

    Spring Boot Logging HTTPリクエストとレスポンス、およびSQLデータベースへのログの書き込み

  16. 16

    Spring Boot の Redis でデータベース タイプ NONE の組み込みデータベース ドライバー クラスを特定できない

  17. 17

    何が速いですか?SQLデータベースの読み取り/書き込みまたはファイルの読み取り/書き込み?

  18. 18

    phpmyadminデータベースの読み取りと書き込みに優れていますか?

  19. 19

    Spring sftpは、ローカルディレクトリなしでリモートで読み取りおよび書き込みを行います

  20. 20

    Spring MailIntegrationでIMAPFolder読み取り/書き込みモードを有効にする方法

  21. 21

    Spring-Batchを使用して、univocityによって返されたアイテムのリストをデータベースに書き込む方法

  22. 22

    PHPはXMLを読み取り、データベースに書き込みます

  23. 23

    Spring Batch:カスタムバッチサイズを使用してデータベーステーブルにリストを書き込む

  24. 24

    組み込みデータベースを無効にする方法Spring-bootspring-data-jpa

  25. 25

    メタデータに埋め込みデータベースを使用し、他のデータに2番目のデータベースを使用するJava Spring Batch

  26. 26

    csvからの読み取りまたはcsvへの書き込み中にデータフレームのデータ型「リスト」を保持する方法

  27. 27

    JdbcBatchItemWriterを使用して、REST APIから読み取り、1回の読み取りで複数のレコードを単一のDBテーブルに書き込むSpringバッチのコード

  28. 28

    DBからデータを取得するテストをSpringブートREST APIに書き込む

  29. 29

    Springの外部でFlatFileItemWriterを単体テストする-「書き込み前にライターを開く必要があります」例外

ホットタグ

アーカイブ