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"?
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
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. –