Spring 无法自动连线。有不止一个';数据源';类型

Spring 无法自动连线。有不止一个';数据源';类型,spring,intellij-idea,spring-boot,spring-jdbc,Spring,Intellij Idea,Spring Boot,Spring Jdbc,我正试图通过以下方式自动连接数据库: @Autowired private DataSource dataSource; 我的应用程序中有一个数据源。yml spring: profiles: active: dev --- spring: profiles: dev datasource: driverClassName: org.mariadb.jdbc.Driver url: jdbc:mariadb://localhost:3306/dbname

我正试图通过以下方式自动连接数据库:

@Autowired
private DataSource dataSource;
我的
应用程序中有一个数据源。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)

我觉得很奇怪,因为我的
应用程序.yml
中只定义了一个数据源,据我所知,我没有定义任何其他数据源

我尝试了一个配置,但仍然遇到同样的问题

@Configuration
@EnableConfigurationProperties
public class AppConfig {

    @Bean
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
}
这是我的“pom”文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>id.group</groupId>
    <artifactId>ProjectName</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>


    <dependencies>
        <!--Spring Boot dependencies-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!--Spring Boot dependencies-->
        <!--Spring Security dependencies-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!--Spring Security dependencies-->
        <!--JWT dependencies-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>
        <!--JWT dependencies-->
        <!--Actuator and HAL browser dependencies-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-rest-hal-browser</artifactId>
        </dependency>
        <!--Actuator and HAL browser dependencies-->
        <!--Database dependencies-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>1.5.7</version>
        </dependency>
        <!--Database dependencies-->

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4.0.0
身份证组
项目名称
1.0-快照
1.8
org.springframework.boot
spring启动程序父级
1.5.2.1发布
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试
org.springframework.boot
弹簧靴开发工具
真的
org.springframework.boot
弹簧启动安全
io.jsonwebtoken
jjwt
0.7.0
org.springframework.boot
弹簧靴起动器执行器
org.springframework.data
spring数据浏览器
org.springframework.boot
弹簧靴启动器jdbc
org.mariadb.jdbc
mariadb java客户端
1.5.7
org.springframework.boot
springbootmaven插件

我正在使用Spring Boot 1.5.2和IntelliJ 2017.1请注意,Spring Boot自动配置bean还没有100%得到支持,请参阅以了解进度和可能的工作运行。试试这个它对我有用,像这样使用@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);
    }
@Autowired
@Qualifier("prodJdbc")
private JdbcTemplate prodJdbcTemplate;
然后像这样使用@autowire

    @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);
    }
@Autowired
@Qualifier("prodJdbc")
private JdbcTemplate prodJdbcTemplate;

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

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

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

是否有创建数据源的Spring配置类或文件?@reos否。数据源仅在
应用程序.yml
file.hmmm中。这很奇怪,您可以添加配置类吗?@reos我现在尝试了(我更新了问题)但是我仍然得到相同的错误。你能尝试在配置bean上添加
@Primary
吗?我尝试了“启用,使用帮助->编辑自定义属性,添加带有idea.spring.boot.filter.autoconfig=false的新行并重新启动IDE”,但我仍然有错误。我能看到同一颗豆子两次。我在原来的问题上添加了一个截图。是否有其他解决方法,或者我是否应该手动创建Bean并使用Primary?