---
title: Spring Batch + Spring Bootで複数DataSourceを扱うときの設定
tags: ["Java", "Spring", "Spring Batch", "Spring Boot"]
categories: ["Programming", "Java", "org", "springframework", "batch"]
date: 2017-03-01T06:13:37Z
updated: 2017-03-01T06:13:37Z
---

聞かれたのでメモ。

Spring BatchはデフォルトでJob管理のためのメタデータテーブルをDBに作成する。
Spring Bootを使うと設定不要でそのテーブルが作成され、アクセスするための`JobRepository`などが作られる。

ただ、これが`DataSource`が一個しか登録されていないことを前提にしているので、本ジョブで複数の`DataSource`を使おうとするとエラーになる。

```
java.lang.IllegalStateException: To use the default BatchConfigurer the context must contain no more thanone DataSource, found 2
```

この時は`JobRepository`用の`DataSource`に`@Primary`をつけて、次のような`BatchConfigurer`を用意しておけば良い。


``` java
@Bean
@ConfigurationProperties(prefix = "spring.datasource1")
@Primary
DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "spring.datasource2")
DataSource dataSource2() {
    return DataSourceBuilder.create().build();
}

@Bean
DefaultBatchConfigurer batchConfigurer(DataSource dataSource) {
    return new DefaultBatchConfigurer(dataSource);
}
```


メタデータテーブルをそもそも作りたくないという場合は[次の記事](https://blog.ik.am/entries/409)を参照。
