2017-02-17 4 views
0

Я хотел использовать несколько источников данных (оракул и sqlserver) в приложении. в соответствии с этим я выполнил конфигурацию. код, который я wriiten это какПочему SpringBoot не создает bean-компонент для многоуровневых источников данных?

файл конфигурации

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; 
import org.springframework.boot.context.properties.ConfigurationProperties; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Primary; 
import org.springframework.jdbc.core.JdbcTemplate; 

import javax.sql.DataSource; 

@Configuration 
public class DataSourceConfiguration { 

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

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

    @Bean 
    public JdbcTemplate jdbcTemplate() { 
     return new JdbcTemplate(firstDataSource()); 
    } 

    @Bean 
    public JdbcTemplate sJdbcTemplate() { 
     return new JdbcTemplate(secondDataSource()); 
    } 
} 

application.yml файл

#First                                
spring.datasource.driverClassName: oracle.jdbc.driver.OracleDriver                 
spring.datasource.url: someJdbcUrl                         
spring.datasource.username: username                         
spring.datasource.password: password                         

#Second                                
spring.secondDatasource.driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver            
spring.secondDatasource.url: some sqlUrl                        
spring.secondDatasource.username: username                       
spring.secondDatasource.password: password  

Основной класс

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.ConfigurableApplicationContext; 

@SpringBootApplication 
public class MainApp { 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(MainApp.class, args); 
     ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(MainApp.class, args); 
     configurableApplicationContext.start(); 

     String[] beanNames = configurableApplicationContext.getBeanDefinitionNames(); 
     System.out.println("--------------------------------------"); 
     System.out.println(); 

     for (String beanName : beanNames) { 

      System.out 
        .println(beanName + " : " + configurableApplicationContext.getBean(beanName).getClass().toString()); 
     } 

     System.out.println("--------------------------------------"); 
     System.out.println(); 

    } 
} 

Gradle зависимостями

 compile group: 'sqljdbc4', name: 'sqljdbc4', version: '4.0' 
     compile(group: 'ojdbc14', name: 'ojdbc14', version: '10.2.0.5') 

, когда я пытаюсь использовать второй источник данных, он бросает исключение, как его боб не был создан

, что я здесь отсутствую ??

+0

@Bean @ConfigurationProperties (префикс = "spring.secoatasource") Возможно, вы имели в виду spring.secondDatasource –

+0

Это все еще не правильно. Следуйте за документом здесь http://docs.spring.io/spring-boot/docs/1.2.0.BUILD-SNAPSHOT/reference/htmlsingle/#howto-two-datasources –

+0

@SouravGanguly Я использую то же самое, что упоминалось весной док. я что-то упускаю?? – sumit

ответ

0

инъекции Try по именам боба:

 @Bean 
     public JdbcTemplate jdbcTemplate(@Qualifier("firstDataSource") DataSource firstDataSource){ 
      return new JdbcTemplate(firstDataSource); 
     } 

     @Bean 
     public JdbcTemplate sJdbcTemplate(@Qualifier("secondDataSource") DataSource secondDataSource){ 
      return new JdbcTemplate(secondDataSource); 
     } 
Смежные вопросы