diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GrayLoadBalancerClientConfiguration.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GrayLoadBalancerClientConfiguration.java index c97fdeb53..638fc9fe6 100755 --- a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GrayLoadBalancerClientConfiguration.java +++ b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GrayLoadBalancerClientConfiguration.java @@ -23,7 +23,6 @@ import com.pig4cloud.pigx.common.gateway.rule.VersionGrayLoadBalancer; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties; import org.springframework.cloud.gateway.config.GatewayLoadBalancerProperties; @@ -39,7 +38,6 @@ import org.springframework.context.annotation.Configuration; * @link https://github.com/lets-mica/mica */ @Configuration -@EnableConfigurationProperties(LoadBalancerProperties.class) @ConditionalOnProperty(value = "gray.rule.enabled", havingValue = "true") @AutoConfigureBefore(GatewayReactiveLoadBalancerClientAutoConfiguration.class) @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE) diff --git a/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/GrayLoadBalancerAutoConfiguration.java b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/GrayLoadBalancerAutoConfiguration.java index d52b5b2ae..c69eacaaa 100644 --- a/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/GrayLoadBalancerAutoConfiguration.java +++ b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/GrayLoadBalancerAutoConfiguration.java @@ -31,7 +31,7 @@ import org.springframework.context.annotation.Configuration; * @date 2020/1/12 */ @Configuration -@ConditionalOnProperty(value = "gray.rule.enabled", havingValue = "true") +@ConditionalOnProperty(value = "gray.rule.enabled", matchIfMissing = true) @LoadBalancerClients(defaultConfiguration = GrayLoadBalancerClientConfiguration.class) public class GrayLoadBalancerAutoConfiguration { diff --git a/pigx-common/pigx-common-sentinel/src/main/java/com/pig4cloud/pigx/common/sentinel/SentinelAutoConfiguration.java b/pigx-common/pigx-common-sentinel/src/main/java/com/pig4cloud/pigx/common/sentinel/SentinelAutoConfiguration.java index 42866075a..b59191515 100755 --- a/pigx-common/pigx-common-sentinel/src/main/java/com/pig4cloud/pigx/common/sentinel/SentinelAutoConfiguration.java +++ b/pigx-common/pigx-common-sentinel/src/main/java/com/pig4cloud/pigx/common/sentinel/SentinelAutoConfiguration.java @@ -21,6 +21,7 @@ import com.alibaba.cloud.sentinel.feign.SentinelFeignAutoConfiguration; import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler; import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser; import com.pig4cloud.pigx.common.sentinel.feign.PigxSentinelFeign; +import com.pig4cloud.pigx.common.sentinel.feign.PigxSentinelFilterConfiguration; import com.pig4cloud.pigx.common.sentinel.handle.PigxUrlBlockHandler; import com.pig4cloud.pigx.common.sentinel.parser.PigxHeaderRequestOriginParser; import feign.Feign; @@ -29,6 +30,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Scope; /** @@ -38,6 +40,7 @@ import org.springframework.context.annotation.Scope; * sentinel 配置 */ @Configuration(proxyBeanMethods = false) +@Import(PigxSentinelFilterConfiguration.class) @AutoConfigureBefore(SentinelFeignAutoConfiguration.class) public class SentinelAutoConfiguration { diff --git a/pigx-common/pigx-common-sentinel/src/main/java/com/pig4cloud/pigx/common/sentinel/feign/PigxSentinelFilterConfiguration.java b/pigx-common/pigx-common-sentinel/src/main/java/com/pig4cloud/pigx/common/sentinel/feign/PigxSentinelFilterConfiguration.java new file mode 100644 index 000000000..d03304420 --- /dev/null +++ b/pigx-common/pigx-common-sentinel/src/main/java/com/pig4cloud/pigx/common/sentinel/feign/PigxSentinelFilterConfiguration.java @@ -0,0 +1,58 @@ +package com.pig4cloud.pigx.common.sentinel.feign; + +import com.alibaba.cloud.sentinel.SentinelProperties; +import com.alibaba.csp.sentinel.adapter.spring.webmvc.SentinelWebInterceptor; +import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler; +import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.DefaultBlockExceptionHandler; +import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser; +import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.UrlCleaner; +import com.alibaba.csp.sentinel.adapter.spring.webmvc.config.SentinelWebMvcConfig; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.util.StringUtils; + +import java.util.Optional; + +/** + * @author lengleng + * @date 2021/12/4 + * + * 避免 spring cloud 2021 不兼容 的问题 + */ +@RequiredArgsConstructor +@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) +public class PigxSentinelFilterConfiguration { + + @Bean + public SentinelWebInterceptor sentinelWebInterceptor(SentinelWebMvcConfig sentinelWebMvcConfig) { + return new SentinelWebInterceptor(sentinelWebMvcConfig); + } + + @Bean + public SentinelWebMvcConfig sentinelWebMvcConfig(SentinelProperties properties, + Optional urlCleanerOptional, Optional blockExceptionHandlerOptional, + Optional requestOriginParserOptional) { + SentinelWebMvcConfig sentinelWebMvcConfig = new SentinelWebMvcConfig(); + sentinelWebMvcConfig.setHttpMethodSpecify(properties.getHttpMethodSpecify()); + sentinelWebMvcConfig.setWebContextUnify(properties.getWebContextUnify()); + + if (blockExceptionHandlerOptional.isPresent()) { + blockExceptionHandlerOptional.ifPresent(sentinelWebMvcConfig::setBlockExceptionHandler); + } + else { + if (StringUtils.hasText(properties.getBlockPage())) { + sentinelWebMvcConfig.setBlockExceptionHandler( + ((request, response, e) -> response.sendRedirect(properties.getBlockPage()))); + } + else { + sentinelWebMvcConfig.setBlockExceptionHandler(new DefaultBlockExceptionHandler()); + } + } + + urlCleanerOptional.ifPresent(sentinelWebMvcConfig::setUrlCleaner); + requestOriginParserOptional.ifPresent(sentinelWebMvcConfig::setOriginParser); + return sentinelWebMvcConfig; + } + +} diff --git a/pigx-common/pigx-common-swagger/pom.xml b/pigx-common/pigx-common-swagger/pom.xml index 61da30114..415e8e035 100644 --- a/pigx-common/pigx-common-swagger/pom.xml +++ b/pigx-common/pigx-common-swagger/pom.xml @@ -79,5 +79,10 @@ spring-cloud-commons provided - + + org.springframework + spring-webmvc + provided + + diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java index c386b1249..ec45ef6db 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/config/SwaggerAutoConfiguration.java @@ -18,10 +18,15 @@ package com.pig4cloud.pigx.common.swagger.config; import com.pig4cloud.pigx.common.swagger.support.SwaggerProperties; import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; @@ -32,12 +37,15 @@ import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.ApiSelectorBuilder; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collectors; /** * @author lengleng swagger配置 禁用方法1:使用注解@Profile({"dev","test"}) @@ -47,7 +55,7 @@ import java.util.function.Predicate; @Configuration @EnableAutoConfiguration @RequiredArgsConstructor -@ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true) +@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) public class SwaggerAutoConfiguration { /** @@ -60,6 +68,7 @@ public class SwaggerAutoConfiguration { private final SwaggerProperties swaggerProperties; @Bean + @ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true) public Docket api() { // base-path处理 if (swaggerProperties.getBasePath().isEmpty()) { @@ -136,4 +145,38 @@ public class SwaggerAutoConfiguration { .version(swaggerProperties.getVersion()).build(); } + @Bean + public BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private void customizeSpringfoxHandlerMappings( + List mappings) { + List copy = mappings.stream().filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List) field.get(bean); + } + catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } + } diff --git a/pigx-gateway/pom.xml b/pigx-gateway/pom.xml index c67019aa1..c7ae38f36 100644 --- a/pigx-gateway/pom.xml +++ b/pigx-gateway/pom.xml @@ -73,10 +73,16 @@ com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway + com.pig4cloud pigx-common-sentinel + + + com.github.ben-manes.caffeine + caffeine + com.pig4cloud diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java index e086b21c2..ebf23594e 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java @@ -122,8 +122,8 @@ public class SysDeptServiceImpl extends ServiceImpl impl @Override public List> selectTree(String deptName) { // 查询全部部门 - List deptAllList = deptMapper - .selectList(Wrappers.lambdaQuery().like(StrUtil.isNotBlank(deptName),SysDept::getName, deptName)); + List deptAllList = deptMapper.selectList( + Wrappers.lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName)); // 查询数据权限内部门 List deptOwnIdList = deptMapper.selectListByScope( Wrappers.lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName), diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzConfig.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzConfig.java index 7e5cb2b27..b1f705ee6 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzConfig.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzConfig.java @@ -31,6 +31,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import java.util.Iterator; @@ -41,6 +42,7 @@ import java.util.Properties; /** * @author 郑健楠 */ +@EnableAsync @Configuration @ConditionalOnClass({ Scheduler.class, SchedulerFactoryBean.class }) @EnableConfigurationProperties({ QuartzProperties.class }) diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzInvokeFactory.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzInvokeFactory.java index bbd761893..aa8f9ee8f 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzInvokeFactory.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/PigxQuartzInvokeFactory.java @@ -25,12 +25,14 @@ import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.annotation.Aspect; import org.quartz.Trigger; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; /** * @author 郑健楠 */ -@Aspect @Slf4j +@Aspect +@Service @AllArgsConstructor public class PigxQuartzInvokeFactory { diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/EventAutoConfiguration.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/EventAutoConfiguration.java deleted file mode 100644 index cb871c7d8..000000000 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/EventAutoConfiguration.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2018-2025, lengleng All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the pig4cloud.com developer nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * Author: lengleng (wangiegie@gmail.com) - */ - -package com.pig4cloud.pigx.daemon.quartz.event; - -import com.pig4cloud.pigx.daemon.quartz.config.PigxQuartzInvokeFactory; -import com.pig4cloud.pigx.daemon.quartz.service.SysJobLogService; -import com.pig4cloud.pigx.daemon.quartz.util.TaskInvokUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableAsync; - -/** - * @author frwcloud - * @date 2018/6/28 - *

- * 多线程自动配置 - */ -@EnableAsync -@Configuration -@ConditionalOnWebApplication -public class EventAutoConfiguration { - - @Autowired - private TaskInvokUtil taskInvokUtil; - - @Autowired - private SysJobLogService sysJobLogService; - - @Bean - public SysJobListener sysJobListener() { - return new SysJobListener(taskInvokUtil); - } - - @Bean - public PigxQuartzInvokeFactory pigxQuartzInvokeFactory(ApplicationEventPublisher publisher) { - return new PigxQuartzInvokeFactory(publisher); - } - - @Bean - public SysJobLogListener sysJobLogListener() { - return new SysJobLogListener(sysJobLogService); - } - - @Bean - public TaskInvokUtil taskInvokUtil(ApplicationEventPublisher publisher) { - return new TaskInvokUtil(publisher); - } - -} diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobListener.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobListener.java index 245537901..78429a998 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobListener.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobListener.java @@ -19,21 +19,23 @@ package com.pig4cloud.pigx.daemon.quartz.event; import com.pig4cloud.pigx.daemon.quartz.entity.SysJob; import com.pig4cloud.pigx.daemon.quartz.util.TaskInvokUtil; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.quartz.Trigger; import org.springframework.context.event.EventListener; import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; /** * @author frwcloud 异步监听定时任务事件 */ @Slf4j -@AllArgsConstructor +@Service +@RequiredArgsConstructor public class SysJobListener { - private TaskInvokUtil taskInvokUtil; + private final TaskInvokUtil taskInvokUtil; @Async @Order diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobLogListener.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobLogListener.java index b7cd500d6..2ba7b47c0 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobLogListener.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/event/SysJobLogListener.java @@ -19,20 +19,22 @@ package com.pig4cloud.pigx.daemon.quartz.event; import com.pig4cloud.pigx.daemon.quartz.entity.SysJobLog; import com.pig4cloud.pigx.daemon.quartz.service.SysJobLogService; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; /** * @author frwcloud 异步监听定时任务日志事件 */ @Slf4j -@AllArgsConstructor +@Service +@RequiredArgsConstructor public class SysJobLogListener { - private SysJobLogService sysJobLogService; + private final SysJobLogService sysJobLogService; @Async @Order diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/util/TaskInvokUtil.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/util/TaskInvokUtil.java index d1fe1b7bd..8ef57f4b4 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/util/TaskInvokUtil.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/util/TaskInvokUtil.java @@ -27,11 +27,10 @@ import com.pig4cloud.pigx.daemon.quartz.service.SysJobService; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.annotation.Aspect; import org.quartz.CronTrigger; import org.quartz.Trigger; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; import java.time.ZoneId; import java.util.Date; @@ -42,14 +41,13 @@ import java.util.Date; * @author 郑健楠 */ @Slf4j -@Aspect +@Component @RequiredArgsConstructor public class TaskInvokUtil { private final ApplicationEventPublisher publisher; - @Autowired - private SysJobService sysJobService; + private final SysJobService sysJobService; @SneakyThrows public void invokMethod(SysJob sysJob, Trigger trigger) { diff --git a/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/NacosServiceInstanceConverter.java b/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/NacosServiceInstanceConverter.java new file mode 100644 index 000000000..91579715a --- /dev/null +++ b/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/NacosServiceInstanceConverter.java @@ -0,0 +1,29 @@ +package com.pig4cloud.pigx.monitor.support; + +import de.codecentric.boot.admin.server.cloud.discovery.DefaultServiceInstanceConverter; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; +import java.util.stream.Collectors; + +import static java.util.Collections.emptyMap; + +/** + * 针对 nacos 2.x 服务注册处理 + * + * @author lengleng + * @date 2021/12/20 + */ +@Configuration(proxyBeanMethods = false) +public class NacosServiceInstanceConverter extends DefaultServiceInstanceConverter { + + @Override + protected Map getMetadata(ServiceInstance instance) { + return (instance.getMetadata() != null) + ? instance.getMetadata().entrySet().stream().filter((e) -> e.getKey() != null && e.getValue() != null) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)) + : emptyMap(); + } + +} diff --git a/pom.xml b/pom.xml index 5ce905b2d..9de2718c0 100644 --- a/pom.xml +++ b/pom.xml @@ -275,6 +275,7 @@ dev + public