SpringBatchを始めよう!開発環境からサンプル実行まで

SpringFrameWork

皆さんは、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」をダウンロードします。

Spring Tools 4

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を起動します。

SpringToolSuite4の場所

通常のEclipseと同様にワークスペースの設定ウィンドウがひらきます。

ワークスペースフォルダを設定して「Launch」ボタンを押下します。

ワークスペースの設定


ウィンドウが起動すると気が付くと思いますが、英語版のままです。

日本語化するためには、まずは以下サイトから日本語化プラグインをダウンロードします。

MargeDoc Project

日本語化ツールのダウンロード


ダウンロードが成功すると、以下のZIPファイルがダウンロードフォルダに保存されます。

  • pleiades-win.zip

ZIPファイルを解凍して「setup.exe」をダブルクリックすると、日本語化のプラグインインストールが開始されます。

日本語化プラグインのsetup.exe

setup.exeをクリックすると、日本語化プラグインの設定ウィンドウが表示されます。

「日本語化するアプリケーション」で「SpringToolSuite4.exe」を選択します。

「eclipsec.exe」ではありません。

「日本語化するアプリケーション」を選択すれば、他2つのパスは自動的に設定されます。

パスが設定されていることを確認したら、「日本語化する」ボタンを押下します。

日本語化プラグインの設定ウィンドウ

完了ウィンドウが表示されれば成功です。

日本語化かの完了ウィンドウ

再度、 SpringToolSuiteを起動します。

念のためクリーン起動(SpringToolSuite4.exe -clean.cmd)で起動します。

日本語化が完了した画面

メニューが日本語で表示されていれば、日本語化は成功です。

プロジェクトの作成から実行まで

プロジェクトの作成

まずはプロジェクトの作成をおこないます。

ファイル → 新規 → プロジェクト を選択します。

プロジェクトの作成

新規プロジェクトウィンドウで、Spring Boot → Spring 入門コンテンツのインポート を選択して、「次へ」を押下します。

新規プロジェクトウィンドウ

インポートするテンプレートで「Batch Processing」を選択して「完了」ボタンを押下します。

コンテンツのインポート

パッケージエクスプローラーにプロジェクトが表示されたら、プロジェクトの作成完了です。

SpringBathプロジェクト作成完了

プロジェクトが2つできていますが、以下の2種類になります。

  • 完成版プロジェクト:gs-batch-processing-complete
  • テンプレートプロジェクト:gs-batch-processing-initial

プロジェクトの構成設定

完成版プロジェクトである「gs-batch-processing-complete」の構成設定をおこないます。

以下の手順でメインクラスを設定するのみです。

プロジェクトを右クリックで選択してメニューをひらき、実行 → 実行の構成 を選択します。

プロジェクトの実行の構成選択

実行構成ウィンドウがひらいたら、左メニューで「Javaアプリケーション」→ 「新規構成」を選択します。

右ペーンの「メイン・クラス」で検索ボタンを押下し「Application – Hello」クラスを選択します。

選択すると、「メイン・クラス」に「hello.Appication」が表示されるので、「実行」ボタンを押下します。


Application-helloのメイン・クラス設定

プロジェクトの実行

プロジェクトの構成で「実行」ボタンを押下したタイミングで、ビルドとプログラム実行がおこなわれます。

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の開発環境が構築できたかと思います。

次回から、構築した環境を使用して様々なアプリケーションの構築を行っていきたいと思います。

 

それではまた!