--- 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)を参照。