diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java index a16bfb5c..b6977773 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantProperties.java @@ -52,9 +52,9 @@ public class TenantProperties { private String tenantIdHeader = "X-Tenant-Id"; /** - * 超级租户 ID + * 超级/默认租户 ID */ - private Long superTenantId = 1L; + private Long superTenantId = 0L; /** * 忽略表(忽略拼接租户条件) diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/config/TenantProvider.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/config/TenantProvider.java index f712d796..b2ad0f93 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/config/TenantProvider.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/config/TenantProvider.java @@ -30,9 +30,9 @@ public interface TenantProvider { /** * 根据租户 ID 获取租户上下文 * - * @param tenantId 租户 ID - * @param isVerify 是否验证有效性 + * @param tenantIdAsString 租户 ID 字符串 + * @param isVerify 是否验证有效性 * @return 租户上下文 */ - TenantContext getByTenantId(String tenantId, boolean isVerify); + TenantContext getByTenantId(String tenantIdAsString, boolean isVerify); } diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/pom.xml b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/pom.xml index 14c45b88..963acd2f 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/pom.xml +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/pom.xml @@ -32,6 +32,7 @@ com.baomidou dynamic-datasource-spring-boot3-starter + true \ No newline at end of file diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantAutoConfiguration.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantAutoConfiguration.java index 102beacd..d493beb3 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantAutoConfiguration.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/autoconfigure/TenantAutoConfiguration.java @@ -16,8 +16,6 @@ package top.continew.starter.extension.tenant.autoconfigure; -import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; -import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator; import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import jakarta.annotation.PostConstruct; @@ -25,6 +23,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -83,6 +82,7 @@ public class TenantAutoConfiguration { */ @Bean @ConditionalOnMissingBean + @ConditionalOnClass(name = "com.baomidou.dynamic.datasource.DynamicRoutingDataSource") public TenantDataSourceAdvisor tenantDataSourceAdvisor(TenantDataSourceInterceptor tenantDataSourceInterceptor) { return new TenantDataSourceAdvisor(tenantDataSourceInterceptor); } @@ -92,6 +92,7 @@ public class TenantAutoConfiguration { */ @Bean @ConditionalOnMissingBean + @ConditionalOnClass(name = "com.baomidou.dynamic.datasource.DynamicRoutingDataSource") public TenantDataSourceInterceptor tenantDataSourceInterceptor(TenantDataSourceHandler tenantDataSourceHandler) { return new TenantDataSourceInterceptor(tenantDataSourceHandler); } @@ -101,9 +102,9 @@ public class TenantAutoConfiguration { */ @Bean @ConditionalOnMissingBean - public TenantDataSourceHandler tenantDataSourceHandler(DataSource dataSource, - DefaultDataSourceCreator dataSourceCreator) { - return new DefaultTenantDataSourceHandler((DynamicRoutingDataSource)dataSource, dataSourceCreator); + @ConditionalOnClass(name = "com.baomidou.dynamic.datasource.DynamicRoutingDataSource") + public TenantDataSourceHandler tenantDataSourceHandler(DataSource dataSource) { + return new DefaultTenantDataSourceHandler(dataSource); } /** @@ -124,8 +125,8 @@ public class TenantAutoConfiguration { */ @Bean @ConditionalOnMissingBean - public TenantHandler tenantHandler(TenantDataSourceHandler tenantDataSourceHandler, TenantProvider tenantProvider) { - return new DefaultTenantHandler(tenantProperties, tenantDataSourceHandler, tenantProvider); + public TenantHandler tenantHandler(TenantProvider tenantProvider) { + return new DefaultTenantHandler(tenantProperties, tenantProvider); } @PostConstruct diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/DefaultTenantHandler.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/DefaultTenantHandler.java index 13e0aff7..1ae8ab05 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/DefaultTenantHandler.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/DefaultTenantHandler.java @@ -16,6 +16,7 @@ package top.continew.starter.extension.tenant.handler; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import top.continew.starter.extension.tenant.TenantDataSourceHandler; import top.continew.starter.extension.tenant.TenantHandler; @@ -34,14 +35,10 @@ import top.continew.starter.extension.tenant.enums.TenantIsolationLevel; public class DefaultTenantHandler implements TenantHandler { private final TenantProperties tenantProperties; - private final TenantDataSourceHandler dataSourceHandler; private final TenantProvider tenantProvider; - public DefaultTenantHandler(TenantProperties tenantProperties, - TenantDataSourceHandler dataSourceHandler, - TenantProvider tenantProvider) { + public DefaultTenantHandler(TenantProperties tenantProperties, TenantProvider tenantProvider) { this.tenantProperties = tenantProperties; - this.dataSourceHandler = dataSourceHandler; this.tenantProvider = tenantProvider; } @@ -50,16 +47,16 @@ public class DefaultTenantHandler implements TenantHandler { if (!tenantProperties.isEnabled()) { return; } - TenantContext tenantHandler = tenantProvider.getByTenantId(tenantId.toString(), false); + TenantContext tenantContext = tenantProvider.getByTenantId(tenantId.toString(), false); // 保存当前的租户上下文 TenantContext originalContext = TenantContextHolder.getContext(); boolean isPush = false; try { // 设置新的租户上下文 - TenantContextHolder.setContext(tenantHandler); + TenantContextHolder.setContext(tenantContext); // 切换数据源 - if (TenantIsolationLevel.DATASOURCE.equals(tenantHandler.getIsolationLevel())) { - dataSourceHandler.changeDataSource(tenantHandler.getDataSource()); + if (TenantIsolationLevel.DATASOURCE.equals(tenantContext.getIsolationLevel())) { + SpringUtil.getBean(TenantDataSourceHandler.class).changeDataSource(tenantContext.getDataSource()); isPush = true; } // 执行业务逻辑 diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/datasource/DefaultTenantDataSourceHandler.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/datasource/DefaultTenantDataSourceHandler.java index c6c7f8a3..6ddef7d7 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/datasource/DefaultTenantDataSourceHandler.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-mp/src/main/java/top/continew/starter/extension/tenant/handler/datasource/DefaultTenantDataSourceHandler.java @@ -17,6 +17,7 @@ package top.continew.starter.extension.tenant.handler.datasource; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.creator.DataSourceProperty; import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator; @@ -40,10 +41,9 @@ public class DefaultTenantDataSourceHandler implements TenantDataSourceHandler { private final DynamicRoutingDataSource dynamicRoutingDataSource; private final DefaultDataSourceCreator dataSourceCreator; - public DefaultTenantDataSourceHandler(DynamicRoutingDataSource dynamicRoutingDataSource, - DefaultDataSourceCreator dataSourceCreator) { - this.dynamicRoutingDataSource = dynamicRoutingDataSource; - this.dataSourceCreator = dataSourceCreator; + public DefaultTenantDataSourceHandler(DataSource dataSource) { + this.dynamicRoutingDataSource = (DynamicRoutingDataSource)dataSource; + this.dataSourceCreator = SpringUtil.getBean(DefaultDataSourceCreator.class); } @Override