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这个注解只能在一个包下存在,不能在其他存在

 

 

 

转载于:https://www.cnblogs.com/cxyyh/p/10630476.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中配置多数据源可以使用dynamic-datasource库来实现。首先需要创建一个多数据源配置类,可以参考\[2\]中的示例代码。在该配置类中,可以定义多个数据源,并使用@ConfigurationProperties注解来指定数据源的配置属性。每个数据源都需要使用@Bean注解来创建一个DataSource实例。其中,@Primary注解用于指定默认的主数据源。接下来,可以在应用程序的其他地方使用这些数据源来进行数据库操作。 另外,还可以参考\[3\]中的文章,了解更多关于Spring Boot多数据源配置的内容。该文章介绍了不同的配置方式,包括使用分包方式整合、使用注解整合以及读写分离库的配置等。 总结起来,Spring Boot配置多数据源可以通过dynamic-datasource库来实现,需要创建一个多数据源配置类,并在其中定义多个数据源。然后可以在应用程序的其他地方使用这些数据源进行数据库操作。 #### 引用[.reference_title] - *1* *2* [Springboot多数据源配置详解](https://blog.csdn.net/qq_36763419/article/details/124683801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringBoot多数据源配置](https://blog.csdn.net/u012060033/article/details/123759694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值