---
title: jBatch(JSR-352) on Java SE 環境 (Spring Batch編)
tags: []
categories: ["Programming", "Java", "org", "springframework", "batch"]
date: 2014-02-18T19:55:21Z
updated: 2014-02-19T00:14:56Z
---

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

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

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

違いは
* 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の機能も使えます][2]。
Spring BatchはReader/Writerの実装が豊富だし、本もたくさんでてるのでSEで使うならこっちの方がいいんじゃないかな。

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

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

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


  [1]: http://yoshio3.com/2014/02/18/jbatchjsr-352-on-java-se-%E7%92%B0%E5%A2%83/
  [2]: /#/entries/205
  [3]: https://github.com/making/StandAloneBatch
