动态数据源

pig 的多数据配置,是基于 dynamic-datasource-spring-boot-starter实现,理论上支持此组件的全部功能。

如何使用

1. 业务服务引入动态数据源服务

  1. <dependency>
  2. <groupId>com.pig4cloud</groupId>
  3. <artifactId>pig-common-datasource</artifactId>
  4. </dependency>

2. 配置数据源信息来源 (JDBC配置)

  1. ## 默认查询本服务数据源 ` gen_datasource_conf` ,可参考 `pig_codegen` 模块
  2. spring:
  3. datasource:
  4. druid:
  5. query-ds-sql: 'select * from gen_datasource_conf where del_flag = 0'

pig 动态数据源使用 - 图1

3. 开启动态数据源

  1. @EnableDynamicDataSource
  2. public class App {
  3. public static void main(String[] args) {
  4. SpringApplication.run(App.class, args);
  5. }
  6. }

4. 使用动态数据源查询

Mapper 层 **@Ds("#last")** 固定写法,最后一个参数为指定数据源(必须有)

  1. @Mapper
  2. public interface DemoMapper extends BaseMapper<Demo> {
  3. @DS("#last")
  4. Map selectDs(String dsName);
  5. }
  • Service 层调用
  1. @Service
  2. public class DemoServiceImpl extends ServiceImpl<DemoMapper, Demo> implements DemoService {
  3. @Override
  4. public Object getByDs(Integer id) {
  5. // 此处 dsName 为以上 gen_datasource_conf 加载数据源 name 字段
  6. return baseMapper.selectDs("pigxx_core");
  7. }
  8. }

扩展使用

  1. @DS("#session.tenantName")//从session获取
  2. public List selectSpelBySession() {
  3. return userMapper.selectUsers();
  4. }
  5. @DS("#header.tenantName")//从header获取
  6. public List selectSpelByHeader() {
  7. return userMapper.selectUsers();
  8. }
  9. @DS("#tenantName")//使用spel从参数获取
  10. public List selectSpelByKey(String tenantName) {
  11. return userMapper.selectUsers();
  12. }
  13. @DS("#user.tenantName")//使用spel从复杂参数获取
  14. public List selecSpelByTenant(User user) {
  15. return userMapper.selectUsers();
  16. }

❤ 问题咨询

手势点击蓝字求关注简约风动态引导关注__2022-09-07+23_18_38.gif