SpringBoot 分包方式多數據源


1、引入依賴

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--mybatis起步依賴-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!--mysql依賴-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

2、配置application.properties中配置多個數據源

#slave dataSource數據源 spring.datasource.slave.driver-class-name =com.mysql.jdbc.Driver spring.datasource.slave.jdbc-url =jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8
spring.datasource.slave.username =root spring.datasource.slave.password =root #master dataSource數據源 spring.datasource.master.driver-class-name =com.mysql.jdbc.Driver spring.datasource.master.jdbc-url =jdbc:mysql://localhost:3306/study01?useUnicode=true&characterEncoding=utf-8
spring.datasource.master.username =root spring.datasource.master.password =root

 

 3、創建多個配置類

   數據源1;

@Configuration @MapperScan(basePackages =DataSourceMaterConfig.PACKAGE,sqlSessionFactoryRef = "masterSqlSessionFactory") public class DataSourceMaterConfig { // master dao所在的包
    public static final String PACKAGE = "com.yehui.mapper.master"; //配置文件所在目錄 //private static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";
 @Bean(name = "mapper/master") @Primary //默認訪問
    @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource msaterDataSource() { return DataSourceBuilder.create().build(); } // 創建Session
    @Bean(name = "masterSqlSessionFactory") @Primary //默認訪問
    public SqlSessionFactory sqlSessionFactory() throws Exception { final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(msaterDataSource()); /* 使用配置文件是加入 Resource[] mapperLocations = new PathMatchingResourcePatternResolver() .getResources(DataSourceMaterConfig.MAPPER_LOCATION); sqlSessionFactoryBean.setMapperLocations(mapperLocations);*/
        return sqlSessionFactoryBean.getObject(); } // 數據源事務管理器
    @Bean(name = "masterDataSourceTransactionManager") @Primary //默認訪問
    public DataSourceTransactionManager masterDataSourceTransactionManager() { return new DataSourceTransactionManager(msaterDataSource()); } }

 

數據源2:

@Configuration
@MapperScan(basePackages =DataSourceSalveConfig.PACKAGE,sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class DataSourceSalveConfig {
    // slave dao所在的包
    public static final String PACKAGE = "com.yehui.mapper.slave";
    //配置文件所在目錄
    private static final String MAPPER_LOCATION = "classpath:mapper/slave/*.xml";

    @Bean(name = "mapper/slave")
    @ConfigurationProperties(prefix = "spring.datasource.slave")
    public DataSource slaveDataSource() {
        return DataSourceBuilder.create().build();
    }

    // 創建Session
    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(slaveDataSource());
        /*使用配置文件時加入

        Resource[] mapperLocations = new PathMatchingResourcePatternResolver()
                .getResources(DataSourceSalveConfig.MAPPER_LOCATION);
        sqlSessionFactoryBean.setMapperLocations(mapperLocations);*/
        return sqlSessionFactoryBean.getObject();
    }

    // 數據源事務管理器
    @Bean(name = "slaveDataSourceTransactionManager")
    public DataSourceTransactionManager slaveDataSourceTransactionManager() {
        return new DataSourceTransactionManager(slaveDataSource());
    }
}

 

4、創建多個包mapper

數據源1:

package com.yehui.mapper.master; import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; public interface MasterMapper { @Select("SELECT * FROM tb_user") public List<Map<String,Object>> selectList(); }

 

數據源2:

package com.yehui.mapper.slave; import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; public interface SlaveMapper { @Select("SELECT * FROM tb_user") public List<Map<String,Object>> selectList(); }

 

5、創建service類

@Service public class UserService { @Autowired private MasterMapper masterMapper; @Autowired private SlaveMapper savlesMapper; public List<Map<String,Object>> selectList1(){ return masterMapper.selectList(); } public List<Map<String,Object>> selectList2(){ return savlesMapper.selectList(); } }

 

6、測試類

@RunWith(SpringRunner.class)
@SpringBootTest
public class DataSourceTest {
    @Autowired
    private UserService userService;
    @Test
    public void  test1(){
        List<Map<String, Object>> mapList = userService.selectList1();
        System.out.println(mapList);
    }
    @Test
    public void  test2(){
        List<Map<String, Object>> mapList = userService.selectList2();
        System.out.println(mapList);
    }
}

 注意配置過程中如果報此錯誤

No qualifying bean of type 'javax.sql.DataSource' available: more than one 'primary' bean found amon

導致原因@Primary這個注解只能在一個包下存在,不能在其他存在

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM