SpringBoot、Mybatis和Druid配置多資料來源
最近做專案需要連兩個不同地址的資料庫,於是研究了一下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(); } }
配置完成,正常使用即可