当前位置:  开发笔记 > 前端 > 正文

无法自动装配.有多个'DataSource'类型的bean

如何解决《无法自动装配.有多个'DataSource'类型的bean》经验,为你挑选了3个好方法。

我正在尝试通过自动装配数据库

@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



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;

我希望这可以帮助你或其他人:)



2> Yann Cébron..:

请注意,尚不100%支持Spring Boot自动配置的bean,请参阅https://youtrack.jetbrains.com/issue/IDEA-139669了解进度和可能的解决方法。



3> Sarvar Nisho..:

我通过在属性上方添加限定符来解决:

@Autowired
@Qualifier("dataSource")
private DataSource dataSource;

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有