IntelliJでSpring BatchのQuick Startを動かしてみる

Spring Batchを本格的に勉強しようと思ったため、Spring Batchの[Quick Start](http://projects.spring.io/spring-batch/)をIntelliJで動かしてみました。主な内容としては、Quick Startを動かすための手順をまとめたもので、超初心者向けとなります。


# 実施手順
##Mavenプロジェクトの作成
Quick Startを読むとMavenとGradleのどちらでもでできるみたいです。
今回は、Mavenを利用することにするので、Mavenプロジェクトを作成します。

1. IntelliJを開き、[File]→[New]→[Project]を選択します。  
2. Mavenを選択し、Project SDKを選択し、[Next]を押します。
3. GroupIdとArtfactIdを入力し、[Next]を押します。
4. Project nameとProject locationを入力し、[Finish]を押します。

##Quick Startの実装と動作確認
Spring Batchのバージョンは、執筆時の最新である3.0.7を使います。
また、Quick Startでは、Spring Bootを使うと早いよと言っているため使うことにします。

### 手順1. pom.xmlの設定 ###
Quick Startの内容に従い、pom.xmlのdependenciesに```spring-boot-starter-batch```を追加します。
その際、paretnに```spring-boot-starter-parent```も忘れずに設定します。

```xml:pom.xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.3.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
</dependencies>
```

**ポイント**
```spring-boot-starter-parent```はSpring Bootが提供する基本設定をビルド環境に組み込む際に必要となる必須事項です。
Quick Startではこのparetnの設定がないので、追記する必要があります。
設定例は[Spring BootのQuick Start](https://projects.spring.io/spring-boot/)から拝借しました。

### 手順2. Configurationクラスの実装 ###
ジョブを設定するConfigurationクラスを作成します。
基本的には、Quick Startの内容に従いクラスを作成してコピペするだけです。

```java:BatchConfiguration.java
@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration
public class BatchConfiguration {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .tasklet(new Tasklet() {
                    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
                        return null;
                    }
                })
                .build();
    }

    @Bean
    public Job job(Step step1) throws Exception {
        return jobBuilderFactory.get("job1")
                .incrementer(new RunIdIncrementer())
                .start(step1)
                .build();
    }
}
```

### 手順3. Mainクラスの実装 ###
Jobを実行するMainクラスを実装します。
こちらもQuick Startの内容をコピペします。

```java:Main.java
public class Main {
    public static void main(String [] args) {
        System.exit(SpringApplication.exit(SpringApplication.run(
                BatchConfiguration.class, args)));
    }
}
```

### 手順4. 実行 ###
pom.xml、Configurationクラス、Mainクラスが用意できたので、IntelliJ上で実行します。
実行構成画面で必要事項をを設定した後、実行ボタンを押して、実行するとコンソールに「**APPLICATION FAILED TO START**」とエラーメッセージが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/177076/94a68994-6f5a-8229-4dc3-bf7b85e52458.png)


どうやら、DBドライバが定義されていないため表示されるようです。
そのため、```pom.xml```にDBドライバを追加し、DB接続情報定義ファイルを用意します。
今回は例としてH2を利用することにします。

```xml:pom.xml
<dependencies>
    <!-- 省略 -->        
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
</dependencies>
```
```properties:resources/application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:batch;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
```

DB関係の設定ができたところで、もう一度実行します。
実行した結果、コンソールに「**Process finished with exit code 0**」と表示されれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/177076/fbad8fec-20ee-cf5f-e41e-86f7443a2271.png)

**ポイント**
DB関係の設定が面倒な場合、```@EnableAutoConfiguration```アノテーションをコメントアウトすることでもエラーを回避できます。

# 最後に
今回が初投稿でした。
今後は、Spring Batchをメインにいろろな内容を投稿していきたいなと思います。