我正在尝试通过自动装配数据库
@Autowired private DataSource dataSource;
我有一个数据源 application.yml
spring: profiles: active: dev --- spring: profiles: dev datasource: driverClassName: org.mariadb.jdbc.Driver url: jdbc:mariadb://localhost:3306/dbname username: user password: password name: dev logging: level: org.springframework: INFO --- spring: profiles: prod name: prod logging: level: org.springframework: INFO
但是我收到一条错误消息.
Could not autowire. There is more than one bean of 'DataSource' type. Beans:dataSource (DataSourceConfiguration.class) dataSource (DataSourceConfiguration.class)
我发现这很奇怪,因为我只有一个数据源定义在application.yml
我的知识中,据我所知,我没有定义任何其他数据源.
我尝试了配置,但我仍然遇到同样的问题.
@Configuration @EnableConfigurationProperties public class AppConfig { @Bean @ConfigurationProperties(prefix="spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } }
这是我的'pom'文件
4.0.0 id.group ProjectName 1.0-SNAPSHOT 1.8 org.springframework.boot spring-boot-starter-parent 1.5.2.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-devtools true org.springframework.boot spring-boot-starter-security io.jsonwebtoken jjwt 0.7.0 org.springframework.boot spring-boot-starter-actuator org.springframework.data spring-data-rest-hal-browser org.springframework.boot spring-boot-starter-jdbc org.mariadb.jdbc mariadb-java-client 1.5.7 org.springframework.boot spring-boot-maven-plugin
我正在使用Spring Boot 1.5.2和IntelliJ 2017.1
试试这个对我有用,像这样使用@Primary
@Primary @Bean(name ="prodDataSource") @ConfigurationProperties(prefix="spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "prodJdbc") public JdbcTemplate prodJdbcTemplate(@Qualifier("prodDataSource") DataSource prodDataSource){ return new JdbcTemplate(prodJdbcTemplate); } @Bean(name = "devDataSource") @ConfigurationProperties(prefix = "spring.datasource.dev") public DataSource devDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "devJdbc") public JdbcTemplate devJdbcTemplate(@Qualifier("devDataSource") DataSource devDataSource) { return new JdbcTemplate(devDataSource); }
然后像这样使用@autowire
@Autowired @Qualifier("prodJdbc") private JdbcTemplate prodJdbcTemplate;
我希望这可以帮助你或其他人:)
请注意,尚不100%支持Spring Boot自动配置的bean,请参阅https://youtrack.jetbrains.com/issue/IDEA-139669了解进度和可能的解决方法。
我通过在属性上方添加限定符来解决:
@Autowired @Qualifier("dataSource") private DataSource dataSource;