SpringBoot + Mybatis-Plus mysql多数据源 + mongodb 多数据源 [备忘]

  1. yml
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapping/*.xml
  global-config:
    refresh-mapper: true

spring:
  profiles:
    active: dev
  datasource:
    dynamic:
      primary: master
      strict: false
      datasource:
        master:
          driver-class-name: com.p6spy.engine.spy.P6SpyDriver
          url: jdbc:p6spy:mysql://ip1:3306/sfdoc?serverTimezone=UTC
          username: root
          password: 123456
        mysql_local:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://ip2:3306/test?serverTimezone=UTC
          username: root
          password: 123456
          # sqlserver
        dkd_bk:
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
          url: jdbc:sqlserver://ip3:1433; databaseName=IDCMon
          username: sa
          password: 13808061828
  data:
    mongodb:
#xd ubuntu
      primary:
        uri: mongodb://10.42.3.20:27017/search
      #xd Windows 
      secondary:
        uri: mongodb://账号:密码@ip地址:27017/sf-yf?authSource=admin
#xd Windows 
      thirdly:
        uri: mongodb://账号:密码@ip地址:27017/sf-zdcy?authSource=admin



  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null
server:
  port: 8001

# 没选用p6spy 请自行修改对应位置
  1. 常量类
    public static final String DS_MYSQL_LOCAL = "mysql_local";

    public static final String DS_MONGODB_XD_UBUNTU = "mongodb_xd_ubuntu";

    public static final String DS_SERVER_DKY_BK = "dkd_bk" ;
  1. 实现类和Dao层增加@DS注解
    @DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
    @DS(“dsName”) dsName可以为组名也可以为具体某个库的名称
    官网推荐: 只在service的类和方法上添加注解,不建议在mapper上添加注解。
@Component
@DS(DBConstants.DS_MYSQL_LOCAL)
public interface TestMapper extends BaseMapper<TestMongoDB> {


}
  1. 控制层使用
    @Autowired
    private TestDBService testDBService ;
        @ApiOperation(value = "测试mysql多数据源")
    @GetMapping("getAll")
    public Result getAll(){

        List<TestDB> list = testDBService.list();
        return Result.ok().data("data",list);
    }

结果:

{
  "success": true,
  "code": 200,
  "message": "成功",
  "data": {
    "data": [
      {
        "id": 1,
        "name": "测试1",
        "age": 19,
        "sex": "男"
      },
      {
        "id": 2,
        "name": "测试2",
        "age": 24,
        "sex": "女"
      }
    ]
  }
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Springboot+MyBatis-Plus实现多租户动态数据模式是一种在Spring Boot框架下使用MyBatis-Plus插件实现多租户数据隔离的方法。它可以根据不同的租户动态切换数据,实现不同租户之间的数据隔离。 实现多租户动态数据模式的关键是配置多个数据,并在运行时根据租户信息动态选择使用哪个数据。以下是一个简单的示例代码: 1. 首先,需要在pom.xml文件中添加Druid数据的依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.21</version> </dependency> ``` 2. 在application.properties或application.yml文件中配置多个数据的连接信息,例如: ```yaml spring.datasource.master.url=jdbc:mysql://localhost:3306/master_db spring.datasource.master.username=root spring.datasource.master.password=123456 spring.datasource.tenant1.url=jdbc:mysql://localhost:3306/tenant1_db spring.datasource.tenant1.username=root spring.datasource.tenant1.password=123456 spring.datasource.tenant2.url=jdbc:mysql://localhost:3306/tenant2_db spring.datasource.tenant2.username=root spring.datasource.tenant2.password=123456 ``` 3. 创建一个多租户数据配置类,用于动态选择数据。可以使用ThreadLocal来保存当前租户的标识,然后根据标识选择对应的数据。以下是一个简单的示例: ```java @Configuration public class MultiTenantDataSourceConfig { @Autowired private DataSourceProperties dataSourceProperties; @Bean @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.tenant1") public DataSource tenant1DataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.tenant2") public DataSource tenant2DataSource() { return DataSourceBuilder.create().build(); } @Bean @Primary public DataSource dynamicDataSource() { DynamicDataSource dynamicDataSource = new DynamicDataSource(); Map<Object, Object> dataSourceMap = new HashMap<>(); dataSourceMap.put("master", masterDataSource()); dataSourceMap.put("tenant1", tenant1DataSource()); dataSourceMap.put("tenant2", tenant2DataSource()); dynamicDataSource.setTargetDataSources(dataSourceMap); dynamicDataSource.setDefaultTargetDataSource(masterDataSource()); return dynamicDataSource; } @Bean public SqlSessionFactory sqlSessionFactory(DataSource dynamicDataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dynamicDataSource); return sessionFactory.getObject(); } @Bean public PlatformTransactionManager transactionManager(DataSource dynamicDataSource) { return new DataSourceTransactionManager(dynamicDataSource); } } ``` 4. 创建一个多租户数据切换器,用于在每次数据库操作前切换数据。以下是一个简单的示例: ```java public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return TenantContext.getTenantId(); } } ``` 5. 创建一个租户上下文类,用于保存当前租户的标识。以下是一个简单的示例: ```java public class TenantContext { private static final ThreadLocal<String> CONTEXT = new ThreadLocal<>(); public static void setTenantId(String tenantId) { CONTEXT.set(tenantId); } public static String getTenantId() { return CONTEXT.get(); } public static void clear() { CONTEXT.remove(); } } ``` 6. 在需要切换数据的地方,调用TenantContext.setTenantId()方法设置当前租户的标识。例如: ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public List<User> getUsers() { TenantContext.setTenantId("tenant1"); List<User> users = userService.getUsers(); TenantContext.clear(); return users; } } ``` 通过以上步骤,就可以实现Springboot+MyBatis-Plus的多租户动态数据模式了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值