IK.AM

@making's tech note


jBatch(JSR-352) on Java SE 環境 (Spring Batch編)

🗃 {Programming/Java/org/springframework/batch}
🗓 Updated at 2014-02-18T19:55:21Z  🗓 Created at 2014-02-18T19:55:21Z   🌎 English Page

寺田さんの「jBatch(JSR-352) on Java SE 環境」の記事で説明されているコード、Spring Batch(3+)でも動きますよ。

SE環境で動かすならRI使うよりSpring Batchで動かした方がいろいろ機能が豊富なのでいいとおもう。

基本は前に書いた記事の内容と同じソースコード、設定ファイルで動きました。コードはGithubに。

違いは

  • src/META-INF/services/batch-config.properties
  • src/META-INF/services/batch-services.properties はいらない(対応していない?)のと、DBはデフォルトのHSQL(インメモリ)のものを使用しました。

あとはログ出力制御するために、logback.xmlを追加。

com.yoshio3.main.StandAloneBatchMainを実行した結果(チャンク数5)は

date:2014-02-19 08:57:14	thread:main	level:INFO 	logger:o.s.b.c.r.support.JobRepositoryFactoryBean      	message:No database type set, using meta data indicating: HSQL
date:2014-02-19 08:57:14	thread:main	level:INFO 	logger:o.s.batch.core.launch.support.SimpleJobLauncher 	message:No TaskExecutor has been set, defaulting to synchronous executor.
date:2014-02-19 08:57:14	thread:main	level:INFO 	logger:o.s.b.c.j.c.s.JsrAutowiredAnnotationBeanPostProcessor	message:JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
date:2014-02-19 08:57:14	thread:main	level:INFO 	logger:o.s.batch.core.job.SimpleStepHandler            	message:Executing step: [first-step]
Reader readItem : hoge1
Processor processItem : hoge1
Reader readItem : hoge2
Processor processItem : hoge2
Reader readItem : hoge3
Processor processItem : hoge3
Reader readItem : hoge4
Processor processItem : hoge4
Reader readItem : hoge5
Processor processItem : hoge5
Writer writeItems : Processor processItem : hoge1
Writer writeItems : Processor processItem : hoge2
Writer writeItems : Processor processItem : hoge3
Writer writeItems : Processor processItem : hoge4
Writer writeItems : Processor processItem : hoge5
Reader readItem : hoge6
Processor processItem : hoge6
Reader readItem : hoge7
Processor processItem : hoge7
Reader readItem : hoge8
Processor processItem : hoge8
Reader readItem : hoge9
Processor processItem : hoge9
Reader readItem : hoge10
Processor processItem : hoge10
Writer writeItems : Processor processItem : hoge6
Writer writeItems : Processor processItem : hoge7
Writer writeItems : Processor processItem : hoge8
Writer writeItems : Processor processItem : hoge9
Writer writeItems : Processor processItem : hoge10
Reader readItem : hoge11
Processor processItem : hoge11
Reader readItem : hoge12
Processor processItem : hoge12
Reader readItem : hoge13
Processor processItem : hoge13
Reader readItem : hoge14
Processor processItem : hoge14
Reader readItem : hoge15
Processor processItem : hoge15
Writer writeItems : Processor processItem : hoge11
Writer writeItems : Processor processItem : hoge12
Writer writeItems : Processor processItem : hoge13
Writer writeItems : Processor processItem : hoge14
Writer writeItems : Processor processItem : hoge15
Reader readItem : hoge16
Processor processItem : hoge16
Reader readItem : hoge17
Processor processItem : hoge17
Reader readItem : hoge18
Processor processItem : hoge18
Reader readItem : hoge19
Processor processItem : hoge19
Reader readItem : hoge20
Processor processItem : hoge20
Writer writeItems : Processor processItem : hoge16
Writer writeItems : Processor processItem : hoge17
Writer writeItems : Processor processItem : hoge18
Writer writeItems : Processor processItem : hoge19
Writer writeItems : Processor processItem : hoge20
Reader readItem : null

もちろんSpring Batchの機能も使えます。 Spring BatchはReader/Writerの実装が豊富だし、本もたくさんでてるのでSEで使うならこっちの方がいいんじゃないかな。

ちなみに僕の観測範囲ではアプリケーションサーバー上でバッチで運用したいってあまり聞かなくって、スタンドアローンなプログラムを作成することがほとんどです。 (そもそもそれJavaで書く必要あるの?ってバッチも多いけど。)

大抵ジョブスケジューラで管理したり、バッチ用の筐体が用意されたりなどなど。まあバッチサーバーにJavaEEサーバー載せてもいいと思いますが。

あと、個人的にはバッチでJPA使うのはどうなの?って思う。カーソルのAPIない気がすけど。


✒️️ Edit  ⏰ History  🗑 Delete