皆さんは、Javaのバッチ処理をどのように構築しているでしょうか?
僕は、社内で用意しているライブラリを使用してバッチ処理をコーディングすることが多いです。
しかし、Web画面はSpringMVCをよく使っています。
SpringBatchの存在は前々から知から知っていたのですが、社内ライブラリを使ったバッチの参考処理が数多くあるので、なかなかSpringBatchに手を出せずにいました。
しかも、画面はSpringMVCを使っているのに、なぜバッチはSpringBatchを使わないのかという疑問を日々感じていました。
今回は、SpringBatchを使うための開発環境構築とサンプルの実行までを解説していきます。
これからSpringBatchを使おうと思っている人の参考になればと思います。
目次
SpringBatchとは
SpringBatchとは、バッチのJavaアプリケーションフレームワークです。
Springがもつ概念として「DI」「AOP」「トランザクション管理」がありますが、SpringBatchも同様の概念で構築されています。
まあ、ピンとくるようなこないような。。。ですが、まずは環境を作って動かしましょう!
環境情報
WindowsマシンにSpringBatchの開発環境を構築します。
今回は、STS(Spring Tools Suite)を使用します。
- OS:Windows7
- STS:Eclipse spring-tool-suite-4-4.2.1
STSの構築
STS(Spring Tools Suite)は、Spring用のIDEとなります。
今回は、EclipseベースのIDEを使用します。
Spring Tools 4 for Eclipseのダウンロード
Springのサイトから「Spring Tools 4 for Eclipse」をダウンロードします。
ダウンロードが成功すると、以下のZIPファイルがダウンロードフォルダに保存されます。
- spring-tool-suite-4-4.2.1.RELEASE-e4.11.0-win32.win32.x86_64.zip
SpringToolSuite4の設定
ダウンロードしたZIPファイルを解凍し、「SpringToolSuite4.exe」をダブルクリックしてSpringToolSuiteを起動します。
通常のEclipseと同様にワークスペースの設定ウィンドウがひらきます。
ワークスペースフォルダを設定して「Launch」ボタンを押下します。
ウィンドウが起動すると気が付くと思いますが、英語版のままです。
日本語化するためには、まずは以下サイトから日本語化プラグインをダウンロードします。
ダウンロードが成功すると、以下のZIPファイルがダウンロードフォルダに保存されます。
- pleiades-win.zip
ZIPファイルを解凍して「setup.exe」をダブルクリックすると、日本語化のプラグインインストールが開始されます。
setup.exeをクリックすると、日本語化プラグインの設定ウィンドウが表示されます。
「日本語化するアプリケーション」で「SpringToolSuite4.exe」を選択します。
「eclipsec.exe」ではありません。
「日本語化するアプリケーション」を選択すれば、他2つのパスは自動的に設定されます。
パスが設定されていることを確認したら、「日本語化する」ボタンを押下します。
完了ウィンドウが表示されれば成功です。
再度、 SpringToolSuiteを起動します。
念のためクリーン起動(SpringToolSuite4.exe -clean.cmd)で起動します。
メニューが日本語で表示されていれば、日本語化は成功です。
プロジェクトの作成から実行まで
プロジェクトの作成
まずはプロジェクトの作成をおこないます。
ファイル → 新規 → プロジェクト を選択します。
新規プロジェクトウィンドウで、Spring Boot → Spring 入門コンテンツのインポート を選択して、「次へ」を押下します。
インポートするテンプレートで「Batch Processing」を選択して「完了」ボタンを押下します。
パッケージエクスプローラーにプロジェクトが表示されたら、プロジェクトの作成完了です。
プロジェクトが2つできていますが、以下の2種類になります。
- 完成版プロジェクト:gs-batch-processing-complete
- テンプレートプロジェクト:gs-batch-processing-initial
プロジェクトの構成設定
完成版プロジェクトである「gs-batch-processing-complete」の構成設定をおこないます。
以下の手順でメインクラスを設定するのみです。
プロジェクトを右クリックで選択してメニューをひらき、実行 → 実行の構成 を選択します。
実行構成ウィンドウがひらいたら、左メニューで「Javaアプリケーション」→ 「新規構成」を選択します。
右ペーンの「メイン・クラス」で検索ボタンを押下し「Application – Hello」クラスを選択します。
選択すると、「メイン・クラス」に「hello.Appication」が表示されるので、「実行」ボタンを押下します。
プロジェクトの実行
プロジェクトの構成で「実行」ボタンを押下したタイミングで、ビルドとプログラム実行がおこなわれます。
Spring Tool Suiteのコンソールに以下文字列が表示されたら、プログラム実行の成功です。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.4.RELEASE)
2019-05-06 01:57:42.101 INFO 9804 --- [ main] hello.Application : Starting Application on Ntomo-PC with PID 9804 (C:\SpringTools\workspace\gs-batch-processing-complete\target\classes started by Ntomo in C:\SpringTools\workspace\gs-batch-processing-complete)
2019-05-06 01:57:42.145 INFO 9804 --- [ main] hello.Application : No active profile set, falling back to default profiles: default
2019-05-06 01:57:45.698 INFO 9804 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-05-06 01:57:45.709 WARN 9804 --- [ main] com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassName=org.hsqldb.jdbcDriver was not found, trying direct instantiation.
2019-05-06 01:57:46.901 INFO 9804 --- [ main] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Driver does not support get/set network timeout for connections. (feature not supported)
2019-05-06 01:57:46.947 INFO 9804 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2019-05-06 01:57:49.255 INFO 9804 --- [ main] o.s.b.c.r.s.JobRepositoryFactoryBean : No database type set, using meta data indicating: HSQL
2019-05-06 01:57:50.046 INFO 9804 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : No TaskExecutor has been set, defaulting to synchronous executor.
2019-05-06 01:57:50.574 INFO 9804 --- [ main] hello.Application : Started Application in 11.109 seconds (JVM running for 13.556)
2019-05-06 01:57:50.577 INFO 9804 --- [ main] o.s.b.a.b.JobLauncherCommandLineRunner : Running default command line with: []
2019-05-06 01:57:50.754 INFO 9804 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [FlowJob: [name=importUserJob]] launched with the following parameters: [{run.id=1}]
2019-05-06 01:57:50.827 INFO 9804 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [step1]
2019-05-06 01:57:50.988 INFO 9804 --- [ main] hello.PersonItemProcessor : Converting (firstName: Jill, lastName: Doe) into (firstName: JILL, lastName: DOE)
2019-05-06 01:57:50.989 INFO 9804 --- [ main] hello.PersonItemProcessor : Converting (firstName: Joe, lastName: Doe) into (firstName: JOE, lastName: DOE)
2019-05-06 01:57:50.990 INFO 9804 --- [ main] hello.PersonItemProcessor : Converting (firstName: Justin, lastName: Doe) into (firstName: JUSTIN, lastName: DOE)
2019-05-06 01:57:50.991 INFO 9804 --- [ main] hello.PersonItemProcessor : Converting (firstName: Jane, lastName: Doe) into (firstName: JANE, lastName: DOE)
2019-05-06 01:57:50.991 INFO 9804 --- [ main] hello.PersonItemProcessor : Converting (firstName: John, lastName: Doe) into (firstName: JOHN, lastName: DOE)
2019-05-06 01:57:51.023 INFO 9804 --- [ main] hello.JobCompletionNotificationListener : !!! JOB FINISHED! Time to verify the results
2019-05-06 01:57:51.033 INFO 9804 --- [ main] hello.JobCompletionNotificationListener : Found <firstName: JILL, lastName: DOE> in the database.
2019-05-06 01:57:51.035 INFO 9804 --- [ main] hello.JobCompletionNotificationListener : Found <firstName: JOE, lastName: DOE> in the database.
2019-05-06 01:57:51.036 INFO 9804 --- [ main] hello.JobCompletionNotificationListener : Found <firstName: JUSTIN, lastName: DOE> in the database.
2019-05-06 01:57:51.036 INFO 9804 --- [ main] hello.JobCompletionNotificationListener : Found <firstName: JANE, lastName: DOE> in the database.
2019-05-06 01:57:51.037 INFO 9804 --- [ main] hello.JobCompletionNotificationListener : Found <firstName: JOHN, lastName: DOE> in the database.
2019-05-06 01:57:51.043 INFO 9804 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [FlowJob: [name=importUserJob]] completed with the following parameters: [{run.id=1}] and the following status: [COMPLETED]
2019-05-06 01:57:51.085 INFO 9804 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2019-05-06 01:57:51.101 INFO 9804 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
「gs-batch-processing-complete」は、「resources」に格納されている「sample-data.csv」を標準出力するサンプルです。
そのため、”JILL””JOE”といった名前が標準出力されています
まとめ
いかがでしたでしょう?
まずはSpringBatchの開発環境が構築できたかと思います。
次回から、構築した環境を使用して様々なアプリケーションの構築を行っていきたいと思います。
それではまた!