uso springboot sirve single que qualifier programación para framework found expected example ejemplo código con but bean anotaciones spring intellij-idea spring-boot spring-jdbc

springboot - No podría autowire. Hay más de un bean de tipo ''DataSource''



qualifier example (3)

Estoy tratando de Autowire una base de datos por

@Autowired private DataSource dataSource;

Tengo una fuente de datos en mi 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

Pero me sale un mensaje de error diciendo.

Could not autowire. There is more than one bean of ''DataSource'' type. Beans:dataSource (DataSourceConfiguration.class) dataSource (DataSourceConfiguration.class)

Lo cual me parece extraño ya que solo tengo una fuente de datos definida en mi application.yml y, según mi conocimiento, no tengo ninguna otra fuente de datos definida.

Probé con una configuración pero sigo teniendo el mismo problema.

@Configuration @EnableConfigurationProperties public class AppConfig { @Bean @ConfigurationProperties(prefix="spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } }

Este es mi archivo ''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>

Estoy usando Spring Boot 1.5.2 e IntelliJ 2017.1


Prueba esto funciono para mi, usa @Primary asi

@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); }

Y luego usa @autowire como este

@Autowired @Qualifier("prodJdbc") private JdbcTemplate prodJdbcTemplate;

Espero que esto pueda ayudarte a ti oa alguien más :)


Resolví agregando calificador encima de la propiedad:

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