2017-08-18 2 views
0

Ich habe eine Spring Boot (Batch-orientierte) Anwendung, die eine Datenquelle verwendet, um einen Batch-Job abzuschließen und Sachen in die Datenbank schreiben.Spring Boot (Batch) - Datenquelle einspeisen

Ich habe die Datenquelle (n) in der wie application.yml definiert:

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 

Das Problem ist, wenn ich versuche, die Datenquelle zu einem der Frühlings-Config-Dateien zu injizieren:

@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; 
    } 
} 

. ..it sagt mir, dass:

Konnte nicht autowire. Es gibt mehr als eine Bean vom Typ "DataSource".

Bohnen: datasource (DataSourceConfiguration.class) datasource (EmbeddedDataSourceConfiguration.class)

Ich versuchte auch, die Datenquelle wie zu injizieren:

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

    ... 
} 

... aber kein Glück :(obwohl das Problem mit den zwei Datenquellen irgendwann verschwindet

Irgendwelche Hinweise, wie man das "umgeht"?

+0

ich denke, "spring.h2.console.enabled = true" und "spring.h2.console.path =/h2-console" aktiviert h2-Datenbank und Sie haben eine andere Datenquelle explizit erneut definiert und beide sind für "Entwicklung" -Profil . So sieht der Container mehrere Datenquellen. – surya

+0

Nicht ganz nur diese, aber die eigentliche Definition auf dem 'default' Profil Chunk. Das erlaubt Ihnen nur den Zugriff auf die H2-Konsole, wenn 'development' durch Browsen' http: //.../ h2-console' verwendet wird. –

Antwort

0

Da Sie 2 Datenquellen haben, müssen Sie sie mit dem @Qualifier der Datenquellen Bean kommentieren und wenn Sie sie auch verwenden. Der Frühling sagt Ihnen, dass er nicht weiß, welchen Sie verwenden möchten.

0

Die DataSource, die Sie annotate es mit @Primary finden feder Boot-Dokumentation here für weitere Informationen verwenden möchten. Zusammen mit @Primary müssen Sie möglicherweise auch @Qualifier zum Steuern der Bean-Injektion verwenden.

+0

Wie ich schon sagte, das Problem ist, dass ich nicht gerne zurückgehen und das konfigurieren würde Datenquelle (n) in der Java-Konfiguration; Ich möchte sie in der YAML-Datei behalten. Wie auch immer, ich habe es so für jetzt, da ich keinen Weg finden kann, es bis jetzt zu funktionieren, aber ja, wenn ich es mit der Java-Konfiguration mache, ist das etwas einfach ... –

Verwandte Themen