From 28250505029005c9d2c5d9cf18edc80e54decb05 Mon Sep 17 00:00:00 2001 From: zhangjf Date: Thu, 19 Feb 2026 20:57:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B3=A8=E5=86=8C=20TenantAwareLoadBala?= =?UTF-8?q?ncer=20=E4=B8=BA=20Spring=20Bean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:TenantAwareLoadBalancer 类存在但未被注册为 Spring Bean 解决方案: 1. 创建 TenantLoadBalancerAutoConfig 配置类 - @ConditionalOnProperty 启用条件配置 - @Bean 注册 ReactorServiceInstanceLoadBalancer 2. 添加 Spring Boot 自动配置注册 - META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports - 注册 TenantLoadBalancerAutoConfig、NacosMetadataConfig、MybatisTenantAutoConfig --- .../TenantLoadBalancerAutoConfig.java | 44 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 3 ++ 2 files changed, 47 insertions(+) create mode 100644 fund-common/src/main/java/com/fundplatform/common/loadbalancer/TenantLoadBalancerAutoConfig.java create mode 100644 fund-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/fund-common/src/main/java/com/fundplatform/common/loadbalancer/TenantLoadBalancerAutoConfig.java b/fund-common/src/main/java/com/fundplatform/common/loadbalancer/TenantLoadBalancerAutoConfig.java new file mode 100644 index 0000000..78619e9 --- /dev/null +++ b/fund-common/src/main/java/com/fundplatform/common/loadbalancer/TenantLoadBalancerAutoConfig.java @@ -0,0 +1,44 @@ +package com.fundplatform.common.loadbalancer; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; + +/** + * 多租户负载均衡器自动配置 + * + *

当 tenant.routing.enabled=true 时启用租户感知的负载均衡器

+ * + *

配置示例:

+ *
+ * tenant:
+ *   routing:
+ *     enabled: true
+ * 
+ */ +@Configuration +@ConditionalOnProperty(name = "tenant.routing.enabled", havingValue = "true", matchIfMissing = true) +public class TenantLoadBalancerAutoConfig { + + /** + * 注册租户感知负载均衡器 + * + *

替换默认的 RoundRobinLoadBalancer,根据租户组路由实例

+ */ + @Bean + public ReactorServiceInstanceLoadBalancer tenantAwareLoadBalancer( + Environment environment, + LoadBalancerClientFactory loadBalancerClientFactory) { + + String serviceId = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); + + return new TenantAwareLoadBalancer( + serviceId, + loadBalancerClientFactory.getLazyProvider(serviceId, ServiceInstanceListSupplier.class) + ); + } +} diff --git a/fund-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/fund-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..0f45aab --- /dev/null +++ b/fund-common/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.fundplatform.common.loadbalancer.TenantLoadBalancerAutoConfig +com.fundplatform.common.nacos.NacosMetadataConfig +com.fundplatform.common.mybatis.MybatisTenantAutoConfig