【发布时间】:2018-01-27 13:45:31
【问题描述】:
我有一个 Spring Boot(面向批处理)应用程序,它使用数据源来完成批处理作业并将内容写入数据库。
我在application.yml 中定义了数据源,例如:
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
问题是当我尝试将数据源注入 Spring 配置文件之一时:
@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;
}
}
...它告诉我:
无法自动接线。 'DataSource' 类型的 bean 不止一个。
豆类: 数据源(DataSourceConfiguration.class) 数据源(EmbeddedDataSourceConfiguration.class)
我也尝试像这样注入数据源:
@Configuration
public class PlayerBatchConfig {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
...
}
...但没有运气 :( ,虽然这两个数据源的问题最终会消失。
任何线索如何“规避”它?
【问题讨论】:
-
我认为 "spring.h2.console.enabled=true" 和 "spring.h2.console.path=/h2-console" 启用了 h2 数据库,并且您再次明确定义了另一个数据源,两者都是用于“开发”配置文件。因此容器被视为多个数据源。
-
不仅仅是那些,而是
default配置文件块上的实际定义。这只让你在浏览http://.../h2-console使用development时访问H2控制台