公司内部项目从SpringMVC转型至SpringBoot,期间遇到不少小挫折,现记录下来方便其他小伙伴能够少走坑。
通常我们一个项目可能存在开发、联调、测试、线上等环境,那么我们使用SpringBoot的工作环境切换配置会很方便,首先新建一个application-dev.properties开发环境文件,然后再application.properties主文件中使用spring.profiles.active=dev引入开发环境配置即可。
下面开始详解多数据源的配置:
1.在application-dev.properties中写入
#mysql x1
spring.datasource.url=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mysql x2
spring.datasource-wmatch.url=xxx
spring.datasource-wmatch.username=xxx
spring.datasource-wmatch.password=xxx
spring.datasource-wmatch.driver-class-name=com.mysql.jdbc.Driver
#mysql x3
spring.datasource-match.url=xxx
spring.datasource-match.username=xxx
spring.datasource-match.password=xxx
spring.datasource-match.driver-class-name=com.mysql.jdbc.Driver
2.
@Configuration
// Springboot多数据源获取配置基类
public class DataSourceConfig {
//get set 对应配置文件中的4个属性
private String url;
private String username;
private String password;
private String driverClassName;
@Bean(name = "micDataSource")
@Primary //主数据源
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "spring.datasource")
public DataSource micDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "wmatchDataSource")
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "spring.datasource-wmatch")
public DataSource wmatchDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "matchDataSource")
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "spring.datasource-match")
public DataSource matchDataSource() {
return DataSourceBuilder.create().build();
}
//拿到不同数据源的SessionFactory
@Bean(name = "micSessionFactory")
@Primary
public LocalSessionFactoryBean micSessionFactory(@Qualifier("micDataSource") DataSource dataSource) {
LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
bean.setDataSource(dataSource);
return bean;
}
@Bean(name = "wmatchSessionFactory")
public LocalSessionFactoryBean wmatchSessionFactory(@Qualifier("wmatchDataSource") DataSource dataSource) {
LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
bean.setDataSource(dataSource);
return bean;
}
@Bean(name = "matchSessionFactory")
public LocalSessionFactoryBean matchSessionFactory(@Qualifier("matchDataSource") DataSource dataSource) {
LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
bean.setDataSource(dataSource);
return bean;
}
/**
* @return the url
*/
public String getUrl() {
return url;
}
/**
* @param url
* the url to set
*/
public void setUrl(String url) {
this.url = url;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username
* the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password
* the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the driverClassName
*/
public String getDriverClassName() {
return driverClassName;
}
/**
* @param driverClassName
* the driverClassName to set
*/
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
}
以上配置已经结束,只需要在使用的地方进行针对不同SessionFactory的注入即可,注入关键字@Qualifier