2016-08-02 33 views
1

我試圖從我的application.properties創建數據源2Spring是如何初始化多個數據源(無彈簧引導)

所有的我發現使用Spring引導或舊XML的方式解決,我不婉使用它。

什麼是這個春季啓動代碼的等價物。

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

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

我application.properties

datasource.primary.url="url" 
    datasource.primary.username="user" 
    datasource.primary.password="password" 
    datasource.primary.driver-class-name=com.sybase.jdbc2.jdbc.SybDriver 


    datasource.secondary.url="url" 
    datasource.secondary.username="user" 
    datasource.secondary.password="password" 
    datasource.secondary.driver-class-name=com.ibm.db2.jcc.DB2Driver 

堆棧:彈簧芯,彈簧網,彈簧webmvc,春天-TX,彈簧ORM,

<springframework.version>4.2.4.RELEASE</springframework.version> 

我想用@Annotation

回答

0

好吧,我做到了,我不知道它是否是正確的方式...

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "com.yourootpackage") 
@PropertySource(value = { "classpath:application.properties" }) 
public Class AppConfiguration extends WebMvcConfigurerAdapter { 

@Value("${datasource.primary.url}") 
private String urlDbPrimary; 

@Value("${datasource.primary.username}") 
private String userDbPrimary; 

@Value("${datasource.primary.password}") 
private String pwdDbPrimary; 

@Value("${datasource.primary.driver-class-name}") 
private String driverDbPrimary; 

@Value("${datasource.secondary.url}") 
private String urlDbSecondary; 

@Value("${datasource.secondary.username}") 
private String userDbSecondary; 

@Value("${datasource.secondary.password}") 
private String pwdDbSecondary; 

@Value("${datasource.secondary.driver-class-name}") 
private String driverDbSecondary; 

// same for secondary 

@Bean 
@Primary 
public DataSource dataSourcePrimary() { 
    BasicDataSource dataSource = new BasicDataSource(); 
    dataSource.setDriverClassName(driverDbPrimary); 
    dataSource.setUrl(urlDbPrimary); 
    dataSource.setUsername(userDbPrimary); 
    dataSource.setPassword(pwdDbPrimary); 

    return dataSource; 
} 

@Bean 
public DataSource dataSourceSecondary() { 
    BasicDataSource dataSource = new BasicDataSource(); 
    dataSource.setDriverClassName(driverDbSecondary); 
    dataSource.setUrl(urlDbSecondary); 
    dataSource.setUsername(userDbSecondary); 
    dataSource.setPassword(pwdDbSecondary); 

    return dataSource; 
} 
} 
+0

你忘了'@ Primary'註解。 –

+0

然後給你的輔助bean添加一個名字,這樣你就可以用'@ Qualifier'將它連接到別的地方。 –

+0

其實,我已經改變了答案的數據源名稱。我沒有真正的主要和次要數據庫。我有一個Oracle數據庫和一個DB2數據庫,都是有用的。我只是用@ Autowired DataSource dataSourceDB2來使用它們;和@ Autowired DataSource dataSourceOracle;它的工作原理。這給了我沒有錯誤,如NoUniqueBeanDefinitionException。 – amdev