最近做项目需要连两个不同地址的数据库,于是研究了一下Spring Boot如何配置多数据源。
- 在application.properties配置
#主数据源
primary.spring.datasource.type =
primary.spring.datasource.driver-class-name =
primary.spring.datasource.url =
primary.spring.datasource.username =
primary.spring.datasource.password =
#其他数据源
secondary.spring.datasource.type =
secondary.spring.datasource.driver-class-name =
secondary.spring.datasource.url =
secondary.spring.datasource.username =
secondary.spring.datasource.password =
- @Configuration进行自定义配置
这里我将需要连主数据源mybatis中的mapper文件放在online.chenke.primary包中,第二个数据源放在online.chenke.secondary包中- 在DataSourceConfig中配置主数据源
@Configuration
@MapperScan(value = "online.chenke.primary", sqlSessionFactoryRef = "sessionFactory")
public class DataSourceConfig {
@Value("${primary.spring.datasource.type}")
private Class<? extends DataSource> dataSourceType;
@Bean("dataSourceProperties")
@Primary
@ConfigurationProperties("primary.spring.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Bean("dataSource")
@Primary
@ConfigurationProperties("primary.spring.datasource")
public DataSource dataSource(@Qualifier("dataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().type(dataSourceType).build();
}
@Bean("sessionFactory")
@Primary
@ConfigurationProperties("primary.spring.datasource")
public SqlSessionFactory sessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
}
- 在SecondaryDataSourceConfig中配置第二个数据源
@Configuration
@MapperScan(value = "online.chenke.secondary", sqlSessionFactoryRef = "secondarySessionFactory")
public class SecondaryDataSourceConfig {
@Value("${secondary.spring.datasource.type}")
private Class<? extends DataSource> dataSourceType;
@Bean("secondaryDataSourceProperties")
@ConfigurationProperties("secondary.spring.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Bean("secondaryDataSource")
@ConfigurationProperties("secondary.spring.datasource")
public DataSource dataSource(@Qualifier("secondaryDataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().type(dataSourceType).build();
}
@Bean("secondarySessionFactory")
@ConfigurationProperties("secondary.spring.datasource")
public SqlSessionFactory sessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
}
配置完成,正常使用即可
网友评论