2017-04-17 8 views
11

मैं एक डेटाबेस Autowire कोशिश कर रहा हूँ की एक से अधिक सेम मैं अपने application.ymlऑटोवायर नहीं कर सका। वहाँ</p> <pre><code>@Autowired private DataSource dataSource; </code></pre> <p>द्वारा 'डेटा स्रोत' प्रकार

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) 

enter image description here

कौन सा मैं अजीब लगता है के बाद से मैं केवल एक डेटा स्रोत मेरी application.yml में परिभाषित किया है और मेरी जानकारी के लिए मैं किसी भी अन्य डेटा स्रोत परिभाषित नहीं है।

मैंने एक कॉन्फ़िगरेशन के साथ प्रयास किया लेकिन मुझे अभी भी एक ही समस्या मिल गई है।

@Configuration 
@EnableConfigurationProperties 
public class AppConfig { 

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

यह मेरा 'पोम' फ़ाइल

<?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> 

मैं वसंत बूट 1.5.2 और इंटेलीजे 2017,1

+0

क्या कोई स्प्रिंग कॉन्फ़िगरेशन क्लास या फ़ाइल है जो डेटासॉर्स बनाती है? – reos

+0

@reos सं। डेटास्रोत केवल 'application.yml' फ़ाइल में है। – g3blv

+0

हम्म यह अजीब है, क्या आप कॉन्फ़िगरेशन कक्षाएं जोड़ सकते हैं? – reos

उत्तर

7

इस यह मेरे लिए काम किया प्रयास करें, इस

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

तरह @Primary का उपयोग और फिर इस

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

मुझे आशा है कि यह आप को या किसी और :)

मदद कर सकते हैं की तरह @autowire का उपयोग
+0

यह काम किया। साझा करने के लिए धन्यवाद। – g3blv

4

उपयोग कर रहा हूँ कृपया ध्यान दें कि वसंत बूट autoconfigured सेम अभी तक 100% समर्थन नहीं कर रहे है , प्रगति और संभावित workaorunds के लिए https://youtrack.jetbrains.com/issue/IDEA-139669 देखें।

+0

मैंने "सक्षम करने के लिए, सहायता-> कस्टम गुण संपादित करें, idea.spring.boot.filter.autoconfig = false के साथ नई पंक्ति जोड़ें और आईडीई को पुनरारंभ करें" लेकिन मुझे अभी भी त्रुटि है। मैं दो बार एक ही बीन देख सकता हूं। मैंने मूल प्रश्न में एक स्क्रीनशॉट जोड़ा। क्या कोई अन्य कामकाज है या क्या मुझे मैन्युअल रूप से बीन बनाना चाहिए और प्राथमिक का उपयोग करना चाहिए? – g3blv

2

मैंने संपत्ति के ऊपर क्वालीफायर जोड़कर हल किया:

@Autowired 
@Qualifier("dataSource") 
private DataSource dataSource; 
संबंधित मुद्दे