2017-08-18 16 views
0

バッチジョブをファイナライズし、データをデータベースに書き込むために、データソースを使用するSpringブート(バッチ指向)アプリケーションがあります。Springブート(バッチ) - データソースの挿入

spring: 
    datasource: 
    url: jdbc:h2:mem:JavaSpringBootBatch 
    username: sa 
    password: 
    profiles: # default, development, production 
    active: default, development 
--- 
spring: 
    h2: 
    # ...config/settings here 
    profiles: development 
--- 
spring: 
    datasource: 
    # ...datasource config here 
    profiles: production 

私は春の設定ファイルのいずれかにデータソースを注入しようとすると、問題は次のとおりです:

@Configuration 
public class PlayerBatchConfig { 
    ... 

    @Bean 
    public ItemWriter<Player> writer(final DataSource dataSource) { 
    final JdbcBatchItemWriter<Player> jdbcItemWriter = new JdbcBatchItemWriter<>(); 
    ... 
    jdbcItemWriter.setDataSource(dataSource); 
    jdbcItemWriter.setSql(sql.toString()); 
    return jdbcItemWriter; 
    } 
} 

は、私のようなapplication.yml内で定義されたデータソース(複数可)を持っています。それは私にそれを教えてくれる:

autowireできませんでした。 'DataSource'型のBeanは複数あります。

豆: データソース(DataSourceConfiguration.class) データソース(EmbeddedDataSourceConfiguration.class)

私はまたのようなデータソースを注入しようとしません:

@Configuration 
public class PlayerBatchConfig { 
    @Bean 
    @ConfigurationProperties(prefix = "datasource") 
    public DataSource dataSource() { 
    return DataSourceBuilder.create().build(); 
    } 

    ... 
} 

...しかし、何の運:(2つのデータソースに関する問題は最終的に消え去るが、

どのようにしてそれを回避するかの手がかり

+0

私は "spring.h2.console.enabled = true"と "spring.h2.console.path =/h2-console"はh2データベースを有効にし、別のデータソースを明示的に再度定義し、両方とも "開発"プロファイル。したがって、コンテナは複数のデータソースとして表示されます。 – surya

+0

それだけではなく、 'default'プロファイルチャンクの実際の定義です。 'http://.../ h2-console'をブラウズして' development'を使うと、H2コンソールにアクセスすることができます –

答えて

0

2つのデータソースがあるので、それらをデータソースBeanの@Qualifierで注釈を付ける必要があります。春は、あなたが使いたいものがどれか分からないことを伝えています。

0

annotate@PrimaryとしたいDataSourceは、詳細についてはスプリングブートのマニュアルhereを参照してください。 @Primaryに加えて、Beanインジェクションを制御するために@Qualifierを使用する必要があります。

+0

私が述べたように、問題は私が戻って設定したいのです。 Java config内のデータソース。私はそれらをYAMLファイルに保存したいと思います。とにかく、私は今のところそれが好きです。なぜなら、これまでのところ動作させる方法を見つけることができないからです。しかし、もし私がJavaの設定をすれば、やや簡単です... –

関連する問題