Skip to main content
© 2020 NTT DATA Corporation
今こそ知りたいSpring Batch
2020/12/17
株式会社NTTデータ 公共・社会基盤事業推進部
橋本 直樹
© 2020 NTT DATA Corporation 2
0.はじめに -自己紹介-
橋本 直樹(Naoki Hashimoto)
株式会社NTTデータ
公共・社会基盤事業推進部 プロジェクト推進統括部 技術戦略担当
シニア・エキスパート
• 開発経験
• 主に、Spring Framework(TERASOLUNA Framework)を用いたWebアプリケーション
開発
• OAuth2.0の仕様に沿った、API認可アプリケーション開発
• Spring Security OAuth(現在は、SpringSecurity5に統合)で実装
• 最近の開発
• AWS上のコンテナ環境で動作するSpring Batchアプリケーション開発
© 2020 NTT DATA Corporation 3
0.はじめに -想定聴講者-
• これから、バッチアプリケーションを開発しなければならないが、そもそもバッチっ
てなに?
• Spring FrameworkでWebアプリを作ったことはあるけど、Spring Batch
はつかったことがない・・・
※サンプルコードはSpring Boot前提となります
• Spring Batchのことは知ってるけど、アーキテクチャとかよくわからないし、使い
方もよくわからない・・・
© 2020 NTT DATA Corporation 4
アジェンダ
1. バッチ処理とは?
2. Spring Batchとは?
3. Spring Batchのアーキテクチャ
【基本編】
– ジョブの構成(Job、Step)
– ビジネスロジックの実装(Tasklet、Chunk)
– ジョブの起動
– ジョブ実行管理
【応用編】
– ジョブの再実行方式(リラン、リスタート)
– フロー制御
– 並列処理
– 多重処理
4. クラウド環境でのSpring Batch (SpringBatchのアーキテクチャ 【番外編】)
5. さいごに
© 2020 NTT DATA Corporation
バッチ処理とは?
Spring Batchとは?
© 2020 NTT DATA Corporation 6
1.バッチ処理とは? ~バッチ処理の定義~
• データ処理におけるバッチ処理は、ひとまとまりのデータを一括して処理する
方式である
• 逐次生み出されるデータを一定期間・一定量集めたものをバッチといい、この
バッチ単位で処理をおこなう方式がバッチ処理である
※バッチ処理, Wikipedia, https://tinyurl.com/y43v4ulr, (参照2020-11-25)
© 2020 NTT DATA Corporation 7
1.バッチ処理とは? ~バッチ処理パターン~
• パターン1
あらかじめ登録した一連の処理を自動的に実行する処理方式(※処理
量は大小様々)
• スケジュール起動
• イベント起動(ファイル格納等)
• オンラインディレード(REST API起動)
企業等の業務システムではこちらのパターンであることが多い
• パターン2
 大量データに対する処理といった重い処理を、一括して実施する
 大規模シミュレーターやAIの機械学習等
© 2020 NTT DATA Corporation 8
2.Spring Batchとは?
• Spring Frameworkをベースとした、バッチアプリケーションを開発するためのアプリケーショ
ンフレームワーク
• 以下の機能を提供
 処理の流れを定型化(tasklet、chunk)
 様々なジョブ起動方式(コマンドライン、キュー等)
 様々なデータ形式への入出力(ファイル、データべース等)
 ジョブの実行管理(実行状態管理、ジョブの再実行等)
 処理の効率化(多重実行、並列実行等)
※Spring Batchのアーキテクチャ, TERASOLUNA Batch Framework for Java (5.x) Development Guideline,https://tinyurl.com/y5x477hg, (参照2020-11-25)
© 2020 NTT DATA Corporation
Spring Batchのアーキテクチャ
【基本編】
© 2020 NTT DATA Corporation 10
3.Spring Batchのアーキテクチャ -ジョブの構成-
Job1
Step1 Step2 StepN
・・・
JobRepository
・・・
JobN
JobLauncher(or JobOperator)
© 2020 NTT DATA Corporation 11
3.Spring Batchのアーキテクチャ -ジョブの構成-
Job1
Step1 Step2 StepN
・・・
JobRepository
・・・
JobN
JobLauncher(or JobOperator) Jobを起動
© 2020 NTT DATA Corporation 12
3.Spring Batchのアーキテクチャ -ジョブの構成-
Job1
Step1 Step2 StepN
・・・
JobRepository
・・・
JobN
JobLauncher(or JobOperator) SpringBatchが
バッチ処理を行う単位
© 2020 NTT DATA Corporation 13
3.Spring Batchのアーキテクチャ -ジョブの構成-
Job1
Step1 Step2 StepN
・・・
JobRepository
・・・
JobN
JobLauncher(or JobOperator) Jobは複数のStepで構成され、
Stepでデータへの処理を行う
© 2020 NTT DATA Corporation 14
3.Spring Batchのアーキテクチャ -ジョブの構成-
Job1
Step1 Step2 StepN
・・・
JobRepository
・・・
JobN
JobLauncher(or JobOperator) JobRepositoryでJob、Stepの
実行状態を管理する
© 2020 NTT DATA Corporation 15
3.Spring Batchのアーキテクチャ -ビジネスロジック実装-
Chunk
• 3つのインターフェースで構成されており、データを読み込み、業務処理、書きこみを実施
• フラットファイル(CSV等)、XMLファイル、JSONファイル、DBアクセスを扱うのを容
易にするために、サポートクラスも用意されている
• 処理対象となるデータを1件ずつ処理するのではなく、一定件数のチャンクを単位とする
• トランザクションは、チャンク単位の中間コミット方式となる
Step
ItemReader ItemProcessor ItemWriter
Data
Chunk Chunk
Item
Item
Item
Item
© 2020 NTT DATA Corporation 16
3.Spring Batchのアーキテクチャ -ビジネスロジック実装-
Tasklet
• executeという1つのメソッドをもつ単純なインターフェースで、Chunkに比べて実装も容易
• Chunkモデルに当てはまらないような処理(入力データに関係のない処理)や、順序性
の担保が必要な処理(コントロールブレイク処理等)に向いている
• トランザクションは、Tasklet処理単位の一括コミット方式となる
• TaskletからServiceクラスなどを呼び出す際は、そのトランザクション属性に注意
• Serviceを別トランザクションとする場合は、Transactionalアノテーションのpropagation属性を
REQUIRES_NEWとする等
Step
Tasklet
© 2020 NTT DATA Corporation 17
3.Spring Batchのアーキテクチャ -ジョブの構成、ビジネスロジック実装-
@Configuration
@EnableBatchProcessing
public class JobConfig extends DefaultBatchConfigurer {
//omitted
@Bean
public Step step01() {
return stepBuilderFactory.get(“step01”).tasklet(tasklet()).build();
}
@Bean
public Job job() throws Exception {
return jobBuilderFactory.get(“job”)
.incrementer(new RunIdIncrementer())
.listener(listener())
.start(step01()).build();
}
//omitted
}
Job,Stepのサンプル(Configクラス)※Taskletの場合
Step01を実行するJob
Tasklet01を実行する
Step
SpringBatchを有効にする
© 2020 NTT DATA Corporation 18
3.Spring Batchのアーキテクチャ -ジョブの構成、ビジネスロジック実装-
Job,Stepのサンプル(Configクラス)※Chunkの場合
@Bean
public Step step02() {
return stepBuilderFactory.get("step02")
.<String, String> chunk(10)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build();
}
@Bean
public Job job() throws Exception {
return jobBuilderFactory.get(“job”)
.incrementer(new RunIdIncrementer())
.listener(listener())
.start(step02()).build();
}
1つのchunkで扱う
アイテム数
© 2020 NTT DATA Corporation 19
3.Spring Batchのアーキテクチャ -ジョブの起動-
• 実行時にジョブを順次起動
• デフォルトでは、Bean定義されたジョブが順次起動される
• application.yml等でspring.batch.job.enabled = false とすると無効
• Javaコマンド引数により起動
• ShellScriptなどで、ComandLineJobRunnerを経由して起動する
• 引数として、ジョブ起動設定ファイルパスやJobIDを設定する
• キュー、DB等をポーリングして非同期実行
• 監視処理を作成し、キューやDBを監視(SpringBatchは監視処理をもっていない)
• 監視処理から、JobOperator経由で起動する
© 2020 NTT DATA Corporation 20
3.Spring Batchのアーキテクチャ -ジョブの起動-
Listener
• JobやStepの実行前後やエラー発生時に処理を挿入するためのインターフェース
• Listenerないで、開始終了ログの出力を行ったりする
• 様々なListenerインターフェースがあるが、以下が一般的
• JobExecutionListener
• StepExecutionListener
• ChunkListener
• ItemReadListener、ItemProcessListener、ItemWriteListener
© 2020 NTT DATA Corporation 21
3.Spring Batchのアーキテクチャ -ジョブの起動-
public class JobListener extends JobExecutionListenerSupport {
@Override
public void beforeJob(JobExecution jobExecution) {
super.beforeJob(jobExecution);
System.out.println("Start JOB");
}
@Override
public void afterJob(JobExecution jobExecution) {
super.afterJob(jobExecution);
System.out.println("End JOB");
}
}
Listenerのサンプルコード
Job実行後に
呼び出される
Job実行前に
呼び出される
© 2020 NTT DATA Corporation 22
3.Spring Batchのアーキテクチャ -ジョブ実行管理-
• JobInstance :ジョブを管理する論理的な単位
• ジョブ名(ジョブID)+ジョブパラメータのセットを一意に管理
• 同一キー情報のJobInstanceは生成されない(実行エラーとなる)
• ジョブは二重実行されない
• JobExecution :ジョブを管理する物理的な実行単位
• 失敗したジョブに対して再実行すると、新しいJobExecutionが作成される
• StepExecution:ステップを管理する物理的な実行単位
JobInstance
JobExecution
StepExecution
*
*
1
1
© 2020 NTT DATA Corporation 23
3.Spring Batchのアーキテクチャ -ジョブ実行管理-
JobRepositoryのメタデータスキーマ
• ジョブ実行管理はDB等で実施
• デフォルトではインメモリで管理
• 永続化が必要な場合は、自身でDBと
スキーマを用意する必要あり
※付録A:メタデータスキーマ, Spring Batch(Ver.4.3.0) - リファレンスドキュメント, https://tinyurl.com/y6cmdrrd, (参照2020-11-25)
© 2020 NTT DATA Corporation 24
3.Spring Batchのアーキテクチャ -ジョブ実行管理-
ジョブの実行ステータス
ステータス 説明 リスタート可否
COMPLETED 実行成功 ×
FAILED 実行失敗 ○
STARTED 実行中 ×
STARTING 開始前 ×
STOPPING 停止待ち ×
STOPPED 停止 ○
ABANDANED 失敗したが処理完了、再起動時スキップ ×
UNKNOWN 状態不明 ×
※BatchStatus, Spring Batch(Ver.4.3.0) - APIドキュメント, https://spring.pleiades.io/spring-batch/docs/4.3.x/api/, (参照2020-11-25)
© 2020 NTT DATA Corporation
Spring Batchのアーキテクチャ
【応用編】
© 2020 NTT DATA Corporation 26
3.Spring Batchのアーキテクチャ -ジョブの再実行方式-
再実行方式には大きく分けて、リラン、リスタートの2種類がある
• リラン
• ジョブを最初からやり直す方式
• Taskletモデルが適している
• リスタート
• ジョブが中断したところから処理を再開する方式
• 正常に処理できていたものをスキップし、未処理のものから処理を再開
• Chunkモデルが適している
© 2020 NTT DATA Corporation 27
3.Spring Batchのアーキテクチャ -ジョブの再実行方式-
リラン
• リラン時、まったく同一の「ジョブ名(ジョブID)+ジョブパラメータ」では起動できない
• 二重実行防止機能が働くため、ジョブパラメータを変更しリランする
• 業務データの初期化等が必要(業務処理のべきとう性を担保することが望ましい)
JobInstance1
JobExecution1-1
リラン JobInstance2
JobExecution2-1
© 2020 NTT DATA Corporation 28
3.Spring Batchのアーキテクチャ -ジョブの再実行方式-
リスタート
• 処理再開位置を保持、取得し、再開位置までのデータスキップが必要
• Chunkモデルを適用することで、比較的実現しやすい(中間コミットモデル)
• 失敗したジョブのJobExecutionIDに対して「-restart」と指定することでリスタート可能
• JobLauncherやJobOperatorから指定可能
JobInstance1
JobExecution1-1
リスタート
JobExecution1-2
ジョブパラメータは、
JobRepositoryから復元
© 2020 NTT DATA Corporation 29
Job1
3.Spring Batchのアーキテクチャ -フロー制御-
Step1
Step2
Step3
シーケンシャルフロー
• 全てのStepが順番に実行されるジョブ
© 2020 NTT DATA Corporation 30
Job1
3.Spring Batchのアーキテクチャ -フロー制御-
シーケンシャルフロー
• 全てのStepが順番に実行されるジョブ
• Step中の処理が異常終了した場合は、後続ステップを実行されない
• Step2が失敗した場合、Step3は実行されない
Step1
Step2
Step3
実行されない
© 2020 NTT DATA Corporation 31
Job1
3.Spring Batchのアーキテクチャ -フロー制御-
シーケンシャルフロー
• 全てのStepが順番に実行されるジョブ
• Step中の処理が異常終了した場合は、後続ステップを実行されない
• Step2が失敗した場合、Step3は実行されない
• 異常終了の原因を取り除き、ジョブをリスタートした場合、異常終了し
たStepから処理をやり直すことが可能
• Job1をリスタートした場合、Step2からリスタート
Step1
Step2
Step3
正常終了Stepは
実行されない
リスタート
© 2020 NTT DATA Corporation 32
3.Spring Batchのアーキテクチャ -フロー制御-
Jobのサンプル(シーケンシャルフロー)
@Bean
public Job job() throws Exception {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.listener(listener())
.start(step01())
.next(step02())
.next(step03())
.build();
}
startで最初のStepを指定し、nextで次のStepをつなげていく
Step1
Step2
Step3
© 2020 NTT DATA Corporation 33
3.Spring Batchのアーキテクチャ -フロー制御-
条件分岐
• Stepの実行結果(ExitStatus)によって、後続の
Stepを変更する
• 実行結果がFAILED以外の状態で、ジョブが終了して
しまった場合、リスタートできなくなることがある
Job1
Step1
Step3 Step2
成功
したか?
Yes
No
© 2020 NTT DATA Corporation 34
3.Spring Batchのアーキテクチャ -フロー制御-
Jobのサンプル(条件分岐)
@Bean
public Job job() throws Exception {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.listener(listener())
.start(step01())
.on("*").to(step03())
.from(step01()).on("FAILED").to(step02())
.end()
.build();
}
Step1
Step3 Step2
成功
したか?
Yes
No
onで実行結果の文字列判定句を設定し、
toで一致した場合のstepを指定
※「*」はゼロ個以上の文字に一致する
© 2020 NTT DATA Corporation 35
3.Spring Batchのアーキテクチャ -並列処理-
マルチスレッドステップ
• 単一プロセス上で、Step(チャンク)単位でスレッドを作成
• マルチスレッド化される際は、順序性が担保されないので、アイテムの処理に順序性が必
要な場合は、本ステップは採用できない
並行ステップ
• 単一プロセス上で、スプリットフロー(複数のStepの連なり)単位でスレッドを作成
© 2020 NTT DATA Corporation 36
3.Spring Batchのアーキテクチャ -並列処理-
@Bean
public TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor("spring_batch");
}
@Bean
public Step step02() {
return stepBuilderFactory.get("step02")
.<String, String> chunk(10)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.taskExecutor(taskExecutor)
.throttleLimit(10)
.build();
}
Stepのサンプル(マルチスレッドステップ)
Chunkごとに、新しい
スレッドを作成する
スレッド数はデフォルトでは最大
4つまでしか生成できないので、
最大値を増やす場合に設定
© 2020 NTT DATA Corporation 37
3.Spring Batchのアーキテクチャ -並列処理-
Flowのサンプル(並行ステップ)
@Bean
public Flow flow1() {
return new FlowBuilder<SimpleFlow>("flow1")
.start(step01())
.next(step02())
.build();
}
@Bean
public Flow flow2() {
return new FlowBuilder<SimpleFlow>("flow2")
.start(step03())
.build();
}
step01→step02というStepの
連なりを1つのFlowとする
step03の実行を1つのFlowとする
Flow1
Step1
Step2
Flow2
Step3
© 2020 NTT DATA Corporation 38
3.Spring Batchのアーキテクチャ -並列処理-
Jobのサンプル(並行ステップ)
@Bean
public Job job() {
return jobBuilderFactory.get("job")
.start(splitFlow())
.next(step04())
.build()
.build();
}
@Bean
public Flow splitFlow() {
return new FlowBuilder<SimpleFlow>("splitFlow")
.split(taskExecutor())
.add(flow1(), flow2())
.build();
}
Flow1
Step1
Step2
Flow2
Step3
Step4
Flow1、Flow2を別スレッドで並走させる
Flow1+Flow2の並走完了後、Step04を実行
© 2020 NTT DATA Corporation 39
3.Spring Batchのアーキテクチャ -多重処理-
パーティショニング
• Stepの実行を分割してマルチスレッドで実行する
• Manager内の処理を特定の件数ごとに、自動的に分割しWorkerを作成する
• 全てのWorkerの処理が完了したら、ManagerのStepを完了とする
Job1
Step1
Step2(Manager)
Step3
Worker
Worker
Worker
Worker
Worker
© 2020 NTT DATA Corporation 40
3.Spring Batchのアーキテクチャ -多重処理-
@Bean
public Step stepManager() {
return stepBuilderFactory
.get("step2.manager")
.partitioner(step02())
.partitioner("step2", partitioner())
.gridSize(10)
.taskExecutor(taskExecutor())
.build();
}
@Bean
public Partitioner partitioner() {
return new Partitioner01();
}
Stepのサンプル(Manegerステップ)
Step02をパーティション化
パーティショナーを追加
パーティションの分割数を設定
© 2020 NTT DATA Corporation 41
3.Spring Batchのアーキテクチャ -多重処理-
public class Partitioner01 implements Partitioner {
@Override
public Map<String, ExecutionContext> partition(int gridSize) {
Map<String, ExecutionContext> map = new HashMap<>();
int maxSize = 1000; // 実際は対象itemの件数を設定
int dataSize = maxSize / gridSize; // 1つのWorkerで扱うデータサイズ
int offset = 0; // 初期位置からのオフセット
for (int i = 0; i < gridSize; i++ ) {
ExecutionContext context = new ExecutionContext();
context.putInt("dataSize", dataSize);
context.putInt("offset", offset);
offset += dataSize;
map.put("partition:" + i, context);
}
return map;
}
}
Partitionerのサンプル Partitonerインターフェースを実装
スレッドを識別する文字列と、スレッドに引き
渡したいパラメータ(ExecutionContext)
をセットでMapに設定して返却
実際にItemReaderなどで
実施する処理に合わせて
変更する
© 2020 NTT DATA Corporation
クラウド環境でのSpring Batch
※Spring Batchのアーキテクチャ
【番外編】
© 2020 NTT DATA Corporation 43
4.クラウド環境でのSpring Batch -クラウド環境におけるバッチアプリケーション開発-
以下のような理由から、バッチ処理はパブリッククラウドサービスと親和性が高い
① バッチ処理は決まった時間のみ起動すればよく、パブリッククラウドサービスを利用した場合、
コストメリットを得やすい
 インスタンスの種類や起動時間に対して課金されるため
② 大量データを扱う場合、容易にスケールアウト可能であるため、業務量に応じたリソース
設計が実現可能
 余分なリソースを予め用意する必要がなく、コスト削減が狙える
AWSにおける、バッチアーキテクチャに適したマネージドサービスを紹介し、
そのサービスでSpring Batchを利用する際の注意点を紹介する
© 2020 NTT DATA Corporation 44
4.クラウド環境でのSpring Batch -バッチアーキテクチャに適したサービス-
AWS Cloud
Auto Scaling group
VPC
ECS
JobQueue
AWS Batch
JobDefinition
ECR
Cloud Watch Logs
AWS Batchの利用
• AWS Batchの実態は、ECS(コンテナオーケストレーションサービス)と独自のキュー
• ECSをそのまま構築する際に考慮する必要がある、クラスタやサービス等が自動構築されるので構築が容易
• キューにメッセージが送信されると、JobDefinitionに記載された定義の通りコンテナが起動する
• コンテナはキューにメッセージが登録されてから起動するため、起動時間のバッファを考慮する必要あり
・・・ ・・・
コンテナイメージ
メッセージ登録 ログ出力
© 2020 NTT DATA Corporation 45
4.クラウド環境でのSpring Batch -バッチアーキテクチャに適したサービス-
ECS + SQSの利用
• 性能要件が厳しく、AWS Batchの起動時間が無視できない場合はECS + SQSの構成で対応
• AWS Batchの起動時間はコンテナイメージのつくりにより異なる
• ECS上でコンテナを常時起動することで、起動コストが発生しないようにする(維持コストは上がる)
• JobQueueの代わりにSQSを利用
• それぞれ個別に構築する必要があるので、構築コストは上がる
AWS Cloud
VPC
SQS
ECS
バッチAP1 バッチAP2 バッチAP3
・・・
キュー1 キュー2
・・・
メッセージ登録
© 2020 NTT DATA Corporation 46
4.クラウド環境でのSpring Batch -アプリケーションのコンテナ化-
• 紹介したマネージドサービスは、全てコンテナアプリケーションを前提としている
• Spring Batchで作成したアプリケーションのDocker Imageを作成し、ECR(AWSの
提供するDockerHubサービス)にpushする必要がある
 Dockerfileを作成しDocker Imageを用意する
FROM amazoncorretto:11
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar","-Dfile.encoding=UTF-8"]
Dockerfileのサンプル AWSの提供するOpenJDK11をベースとする
Maven等で作成したjarファイルをコピー
コンテナ起動時にJavaコ
マンドでSpring Batchアプ
リケーションを起動
© 2020 NTT DATA Corporation 47
4.クラウド環境でのSpring Batch -アプリケーションのスケールアウト-
• 紹介したマネージドサービスは、キューに滞留したメッセージの量によって、コンテナを新たに
起動することによって、スケールアウトを実現可能
• アプリケーションは、コンテナが増えた際にスケールアウト可能な単位でジョブを設計する必
要がある
• 1ジョブで大量のファイルを取り扱う場合、複数のジョブから扱うファイルを重複させな
いようにする制御は難しく、結局、1つのジョブでやり切る必要がある
• 1ジョブ1ファイルといった単位で処理することで、ファイル量が増えればジョブの数を増
やし、ジョブの数が多くなれば(キューに滞留したメッセージ数が多い)コンテナを増
やしてスケールアウトすることが可能
© 2020 NTT DATA Corporation 48
4.クラウド環境でのSpring Batch -アプリケーションのスケールアウト-
Job
1ジョブで大量ファイル
スケールアウト
Job
Job
1ジョブで1ファイル
スケールアウト
Job
1メッセージであたりの
ファイル数も大量になっ
ており、スケールアウト
しても、ファイルを同時
に処理できない
ファイル数が増えれば、
メッセージ数が増え、ス
ケールアウトした先の
ジョブでも同時にファイ
ルの処理が可能
© 2020 NTT DATA Corporation 49
4.クラウド環境でのSpring Batch -ジョブ管理テーブルの作成時の注意点-
• RDS(RDBのマネージドサービス)上で、ジョブ管理テーブルを構築する必要がある
• 前述の通り、コンテナ化したアプリがスケールアウトしていくと、RDSへのアクセス数が増加
し、コネクションプールが枯渇してしまう場合がある
• Spring Batchを利用する場合は、業務アプリケーション上で利用しない場合でもRDS
が必要となるので、性能試験を実施してコネクションプール枯渇やCPU使用率高騰等の
性能問題が発生しなか確認する必要がある
© 2020 NTT DATA Corporation
おわりに
© 2020 NTT DATA Corporation 51
5.おわりに
• バッチ処理ってなに?
• データを一定期間集めて、一括して処理する方式
• Spring Batchのアーキテクチャは?
• Job、Stepで構成されている
• ファイルやDBなどのデータ読み込み、処理、書きこみを実施することを前提としている
• Tasklet、Chunkのモデルがあり、処理内容や再実行方式により選択する
• Spring Batchはどうやって使うの?
• Javaコマンド引数による指定
• キューやDBをポーリングすることによる非同期実行
© 2020 NTT DATA Corporation 52
5.おわりに
参考情報
• Spring Batch - リファレンスドキュメント(バージョン 4.3.0)
• https://spring.pleiades.io/spring-batch/docs/current/reference/html/
• TERASOLUNA Batch Framework for Java (5.x) Development Guideline(バージョン5.3.0)
• https://terasoluna-batch.github.io/guideline/current/ja/single_index.html
• Amazon SQSを使ったSpringアプリケーション(3)(4), IT Search+
• https://news.mynavi.jp/itsearch/article/devsoft/4713
• https://news.mynavi.jp/itsearch/article/devsoft/4756
• [AWS Black Belt Online Seminar] AWS Batch
• https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-batch-2019/
© 2020 NTT DATA Corporation
ご静聴ありがとうございました
本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。