最近做项目需要连两个不同地址的数据库, 于是研究了一下 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();
- }
- }
配置完成, 正常使用即可
来源: http://www.jianshu.com/p/e4e2fe4d0394