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();
    }
}

配置完成,正常使用即可

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容