美文网首页
spring boot 多数据源配置

spring boot 多数据源配置

作者: 樱花舞 | 来源:发表于2019-03-04 22:25 被阅读0次

    1、准备(使用的是spring boot + mybatis)

    首先在建立如下图的目录:


    目录结构.png

    2、建立SystemCofig(slave)和GoalsConfig(master)两个配置类

    2.1SystemCofig(注意:@Bean的名称是互相呼应的)
    package com.my.projects.daily.goals.service;
    
    
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    /**
     * @description:
     * @author: fengchangxin
     * @create: 2019-03-04 16:02
     */
    @Configuration
    @MapperScan(basePackages = "com.my.projects.daily.goals.slave",sqlSessionTemplateRef = "slaveSqlSessionTemplate")
    public class SystemCofig {
        @Bean(name = "slaveDataSource")
        @ConfigurationProperties(prefix = "spring.datasource.slave")
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "slaveSqlSessionFactory")
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:slave/*.xml"));
            return bean.getObject();
        }
    
        @Bean(name = "slaveTransactionManager")
        public DataSourceTransactionManager testTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "slaveSqlSessionTemplate")
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
    
    2.2GoalsConfig
    package com.my.projects.daily.goals.service;
    
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    /**
     * @description:
     * @author: fengchangxin
     * @create: 2019-03-04 16:11
     */
    @Configuration
    @MapperScan(basePackages = {"com.my.projects.daily.goals.master"}, sqlSessionTemplateRef  = "masterSqlSessionTemplate")
    public class GoalsConfig {
        @Bean(name = "masterDataSource")
        @ConfigurationProperties(prefix = "spring.datasource.master")
        @Primary
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "masterSqlSessionFactory")
        @Primary
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:master/*.xml"));
            return bean.getObject();
        }
    
        @Bean(name = "masterTransactionManager")
        @Primary
        public DataSourceTransactionManager testTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "masterSqlSessionTemplate")
        @Primary
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
    

    然后就可以调用不同数据库的mapper了,在service实现类中可以直接调用。

        @Autowired
        private UserSystemMapper userSystemMapper;
    
        @Autowired
        private DailyGoalsMapper dailyGoalsMapper;
    

    相关文章

      网友评论

          本文标题:spring boot 多数据源配置

          本文链接:https://www.haomeiwen.com/subject/htqwuqtx.html