看完这篇,搞定SpringBoot多数据源

添加多数据源配置

spring.datasource.platform.jdbc-url=jdbc:mysql://localhost:3306/platform
spring.datasource.platform.username=root
spring.datasource.platform.password=root
spring.datasource.platform.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.mall.jdbc-url=jdbc:mysql://localhost:3306/mall
spring.datasource.mall.username=root
spring.datasource.mall.password=root
spring.datasource.mall.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.mapper-locations=classpath:mapper/**.xml

初始化数据源与mybatis配置

  1. 新建一个多数据源的配置类
@Configuration
public class DataSourceConfig {

    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.platform")
    public DataSource platformDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.mall")
    public DataSource mallDataSource() {
        return DataSourceBuilder.create().build();
    }
}
  1. 分别创建两个数据源的mybatis配置

platform数据源JPA配置

@Configuration
@MapperScan(basePackages = "com.example.refreshcommodity.mapper.platform",
            sqlSessionFactoryRef = "sqlSessionFactoryPlatform",
            sqlSessionTemplateRef = "sqlSessionTemplatePlatform")
public class PlatformConfig {
    private DataSource platformDataSource;

    public PlatformConfig(@Qualifier("platformDataSource") DataSource platformDataSource) {
        this.platformDataSource = platformDataSource;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactoryPlatform() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(platformDataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/platform/*.xml"));
        return bean.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplatePlatform() throws Exception {
        return new SqlSessionTemplate(sqlSessionFactoryPlatform());
    }
}

mall数据源JPA配置

@Configuration
@MapperScan(basePackages = "com.example.refreshcommodity.mapper.mall",
            sqlSessionFactoryRef = "sqlSessionFactoryMall",
            sqlSessionTemplateRef = "sqlSessionTemplateMall")
public class MallConfig {
    private DataSource mallDataSource;

    public MallConfig(@Qualifier("mallDataSource") DataSource mallDataSource) {
        this.mallDataSource = mallDataSource;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactoryMall() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(mallDataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/mall/*.xml"));
        return bean.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplateMall() throws Exception {
        return new SqlSessionTemplate(sqlSessionFactoryMall());
    }
}
  1. 创建mapper接口
  • com.example.refreshcommodity.mapper.mall目录下创建mall数据源的接口
  • com.example.refreshcommodity.mapper.platform目录下创建platform数据源的接口

最后的目录结构如下:

测试

编写测试类验证
MallMapper.java代码

public interface MallMapper {

    List<Map<String,Object>> getSchoolList();
    
}

MallMapper.xml代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.refreshcommodity.mapper.mall.MallMapper">
    
    <select id="getSchoolList" resultType="java.util.Map" parameterType="java.util.List">
        select * from school
    </select>
    
</mapper>

PlatformMapper.java代码

public interface PlatformMapper {

    List<Map<String,Object>> getUserList();
    
}

PlatformMapper.xml代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.refreshcommodity.mapper.platform.PlatformMapper">

    <select id="getUserList" resultType="java.util.Map" parameterType="java.util.List">
        select * from user
    </select>
    
</mapper>

MyController.java代码

@RestController
public class MyController {

    @Autowired
    PlatformMapper platformMapper;
    @Autowired
    MallMapper mallMapper;

    @GetMapping("/test")
    public String test() {
        List<Map<String, Object>> schoolList = mallMapper.getSchoolList();
        List<Map<String, Object>> userList = platformMapper.getUserList();
        Map<String, Object> result = new HashMap<>();
        result.put("schoolList", schoolList);
        result.put("userList", userList);
        return result.toString();
    }

}

测试结果

{
	"schoolList": [{
		"address": "北京市三里屯",
		"name": "清华附属小学",
		"id": 1
	}],
	"userList": [{
		"name": "小明",
		"id": 1,
		"age": 10
	}]
}

可以看到实现了多数据源的查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值