J'ai une application Spring Boot (orientée par lots) qui utilise une source de données afin de finaliser un travail par lots et d'écrire des éléments dans la base de données.Spring Boot (Batch) - Inject Datasource
J'ai la source de données (s) défini à l'intérieur du application.yml
comme:
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
La question est quand je tente d'injecter la source de données dans l'un des fichiers de configuration de printemps:
@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 me dit que:
Impossible d'autowire. Il y a plus d'un bean de type 'DataSource'.
haricots: dataSource (DataSourceConfiguration.class) dataSource (EmbeddedDataSourceConfiguration.class)
J'ai aussi essayé d'injecter la source de données comme:
@Configuration
public class PlayerBatchConfig {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
...
}
... mais pas de chance :(, bien que le problème avec les deux sources de données disparaisse finalement
Des indices pour "contourner" cela?
Je pense que "spring.h2.console.enabled = true" et "spring.h2.console.path =/h2-console" active la base de données h2 et vous avez défini explicitement une autre source de données et les deux sont pour le profil de "développement" . Ainsi conteneur voyant comme source de données multiples. – surya
Pas tout à fait ceux-là, mais la définition réelle sur le morceau de profil 'default'. Cela ne vous permet d'accéder à la console H2 que lorsque 'développement' est utilisé en naviguant' http: //.../ h2-console' –