From 039ef607b3021a910c4400bb24d253e58075d5e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Sat, 24 Jun 2023 10:48:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=9A=E7=A7=9F=E6=88=B7=20TenantFac?= =?UTF-8?q?tory=20=E6=B7=BB=E5=8A=A0=E5=AF=B9=20Spring=20@Configuration=20?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=85=8D=E7=BD=AE=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/core/multi-tenancy.md | 22 ++++++++++++++++++- .../boot/MybatisFlexAutoConfiguration.java | 16 +++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/zh/core/multi-tenancy.md b/docs/zh/core/multi-tenancy.md index 72732bc9..10b5cbba 100644 --- a/docs/zh/core/multi-tenancy.md +++ b/docs/zh/core/multi-tenancy.md @@ -60,6 +60,26 @@ public interface TenantFactory { 除了显示租户自己的数据以外,还包含下级租户的数据,这种场景则要求 `getTenantIds` 返回多个值。 - **场景3**:忽略租户条件,由代码自定义条件查询,此项要求 `getTenantIds` 返回 null 或者 空数组。 + + + +## SpringBoot 支持 +在 SpringBoot 项目下,直接通过 `@Configuration` 即可使用: + +```java +@Configuration +public class MyConfiguration { + + @Bean + public TenantFactory tenantFactory(){ + TenantFactory tenantFactory = new ....; + return tenantFactory; + } + +} +``` + + ## 注意事项 ### 新增数据时 @@ -150,4 +170,4 @@ try { } ``` -当然,除此之外,`TenantFactory` 返回空数据,也会忽略 tenant 条件。 \ No newline at end of file +当然,除此之外,`TenantFactory` 返回空数据,也会忽略 tenant 条件。 diff --git a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java index 3f56b320..b4b81f69 100644 --- a/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java +++ b/mybatis-flex-spring-boot-starter/src/main/java/com/mybatisflex/spring/boot/MybatisFlexAutoConfiguration.java @@ -22,6 +22,8 @@ import com.mybatisflex.core.mybatis.FlexConfiguration; import com.mybatisflex.core.table.DynamicSchemaProcessor; import com.mybatisflex.core.table.DynamicTableProcessor; import com.mybatisflex.core.table.TableManager; +import com.mybatisflex.core.tenant.TenantFactory; +import com.mybatisflex.core.tenant.TenantManager; import com.mybatisflex.spring.FlexSqlSessionFactoryBean; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.mapping.DatabaseIdProvider; @@ -116,6 +118,9 @@ public class MybatisFlexAutoConfiguration implements InitializingBean { protected final DynamicTableProcessor dynamicTableProcessor; protected final DynamicSchemaProcessor dynamicSchemaProcessor; + //多租户 + protected final TenantFactory tenantFactory; + public MybatisFlexAutoConfiguration(MybatisFlexProperties properties, ObjectProvider interceptorsProvider, ObjectProvider typeHandlersProvider, ObjectProvider languageDriversProvider, @@ -124,7 +129,8 @@ public class MybatisFlexAutoConfiguration implements InitializingBean { ObjectProvider> sqlSessionFactoryBeanCustomizers, ObjectProvider dataSourceDecipherProvider, ObjectProvider dynamicTableProcessorProvider, - ObjectProvider dynamicSchemaProcessorProvider + ObjectProvider dynamicSchemaProcessorProvider, + ObjectProvider tenantFactoryProvider ) { this.properties = properties; this.interceptors = interceptorsProvider.getIfAvailable(); @@ -141,6 +147,9 @@ public class MybatisFlexAutoConfiguration implements InitializingBean { //动态表名 this.dynamicTableProcessor = dynamicTableProcessorProvider.getIfAvailable(); this.dynamicSchemaProcessor = dynamicSchemaProcessorProvider.getIfAvailable(); + + //多租户 + this.tenantFactory = tenantFactoryProvider.getIfAvailable(); } @Override @@ -160,6 +169,11 @@ public class MybatisFlexAutoConfiguration implements InitializingBean { if (dynamicSchemaProcessor != null) { TableManager.setDynamicSchemaProcessor(dynamicSchemaProcessor); } + + //多租户 + if (tenantFactory != null) { + TenantManager.setTenantFactory(tenantFactory); + } } private void checkConfigFileExists() {