From 7e30209b5f78eeb3482ddb4fec20531a3e855e30 Mon Sep 17 00:00:00 2001 From: lbw Date: Tue, 11 Jul 2023 10:16:49 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20Refactoring=20code.=20=E9=80=82?= =?UTF-8?q?=E9=85=8Dfeign?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../openfeign/PigxFeignClientsRegistrar.java | 251 ------------------ pigx-common/pigx-common-sequence/pom.xml | 4 + .../main/resources/META-INF/spring.factories | 10 - .../report/PigxReportPlatformApplication.java | 2 + 4 files changed, 6 insertions(+), 261 deletions(-) delete mode 100644 pigx-common/pigx-common-feign/src/main/java/org/springframework/cloud/openfeign/PigxFeignClientsRegistrar.java delete mode 100755 pigx-upms/pigx-upms-api/src/main/resources/META-INF/spring.factories diff --git a/pigx-common/pigx-common-feign/src/main/java/org/springframework/cloud/openfeign/PigxFeignClientsRegistrar.java b/pigx-common/pigx-common-feign/src/main/java/org/springframework/cloud/openfeign/PigxFeignClientsRegistrar.java deleted file mode 100644 index fc224a285..000000000 --- a/pigx-common/pigx-common-feign/src/main/java/org/springframework/cloud/openfeign/PigxFeignClientsRegistrar.java +++ /dev/null @@ -1,251 +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 org.springframework.cloud.openfeign; - -import com.pig4cloud.pigx.common.feign.PigxFeignAutoConfiguration; -import lombok.Getter; -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.beans.factory.config.BeanDefinitionHolder; -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.context.EnvironmentAware; -import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; -import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.core.annotation.AnnotationAttributes; -import org.springframework.core.env.Environment; -import org.springframework.core.io.support.SpringFactoriesLoader; -import org.springframework.core.type.AnnotationMetadata; -import org.springframework.lang.Nullable; -import org.springframework.util.ClassUtils; -import org.springframework.util.StringUtils; - -import java.util.List; -import java.util.Map; - -/** - * @author L.cm - * @date 2020/2/8 - *

- * feign 自动配置功能 from mica - */ -public class PigxFeignClientsRegistrar - implements ImportBeanDefinitionRegistrar, BeanClassLoaderAware, EnvironmentAware { - - private final static String BASE_URL = "http://127.0.0.1:${server.port}${server.servlet.context-path}"; - - @Getter - private ClassLoader beanClassLoader; - - @Getter - private Environment environment; - - @Override - public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { - registerFeignClients(registry); - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.beanClassLoader = classLoader; - } - - private void registerFeignClients(BeanDefinitionRegistry registry) { - List feignClients = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), - getBeanClassLoader()); - // 如果 spring.factories 里为空 - if (feignClients.isEmpty()) { - return; - } - for (String className : feignClients) { - try { - Class clazz = beanClassLoader.loadClass(className); - AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(clazz, - FeignClient.class); - if (attributes == null) { - continue; - } - // 如果已经存在该 bean,支持原生的 Feign - if (registry.containsBeanDefinition(className)) { - continue; - } - registerClientConfiguration(registry, getClientName(attributes), attributes.get("configuration")); - - validate(attributes); - BeanDefinitionBuilder definition = BeanDefinitionBuilder - .genericBeanDefinition(FeignClientFactoryBean.class); - definition.addPropertyValue("url", getUrl(attributes)); - definition.addPropertyValue("path", getPath(attributes)); - String name = getName(attributes); - definition.addPropertyValue("name", name); - - // 兼容最新版本的 spring-cloud-openfeign,尚未发布 - StringBuilder aliasBuilder = new StringBuilder(18); - if (attributes.containsKey("contextId")) { - String contextId = getContextId(attributes); - aliasBuilder.append(contextId); - definition.addPropertyValue("contextId", contextId); - } - else { - aliasBuilder.append(name); - } - - definition.addPropertyValue("type", className); - definition.addPropertyValue("decode404", attributes.get("decode404")); - definition.addPropertyValue("fallback", attributes.get("fallback")); - definition.addPropertyValue("fallbackFactory", attributes.get("fallbackFactory")); - definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); - - AbstractBeanDefinition beanDefinition = definition.getBeanDefinition(); - - // alias - String alias = aliasBuilder.append("FeignClient").toString(); - - // has a default, won't be null - boolean primary = (Boolean) attributes.get("primary"); - - beanDefinition.setPrimary(primary); - - String qualifier = getQualifier(attributes); - if (StringUtils.hasText(qualifier)) { - alias = qualifier; - } - - BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, className, - new String[] { alias }); - BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry); - - } - catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - } - - /** - * Return the class used by {@link SpringFactoriesLoader} to load configuration - * candidates. - * @return the factory class - */ - private Class getSpringFactoriesLoaderFactoryClass() { - return PigxFeignAutoConfiguration.class; - } - - private void validate(Map attributes) { - AnnotationAttributes annotation = AnnotationAttributes.fromMap(attributes); - // This blows up if an aliased property is overspecified - FeignClientsRegistrar.validateFallback(annotation.getClass("fallback")); - FeignClientsRegistrar.validateFallbackFactory(annotation.getClass("fallbackFactory")); - } - - private String getName(Map attributes) { - String name = (String) attributes.get("serviceId"); - if (!StringUtils.hasText(name)) { - name = (String) attributes.get("name"); - } - if (!StringUtils.hasText(name)) { - name = (String) attributes.get("value"); - } - name = resolve(name); - return FeignClientsRegistrar.getName(name); - } - - private String getContextId(Map attributes) { - String contextId = (String) attributes.get("contextId"); - if (!StringUtils.hasText(contextId)) { - return getName(attributes); - } - - contextId = resolve(contextId); - return FeignClientsRegistrar.getName(contextId); - } - - private String resolve(String value) { - if (StringUtils.hasText(value)) { - return this.environment.resolvePlaceholders(value); - } - return value; - } - - private String getUrl(Map attributes) { - // 如果是单体项目自动注入 & url 为空 - String url = (String) attributes.get("url"); - boolean present = ClassUtils.isPresent("com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient", - this.getClass().getClassLoader()); - if (!StringUtils.hasText(url) && !present) { - url = resolve(BASE_URL); - } - - return FeignClientsRegistrar.getUrl(url); - } - - private String getPath(Map attributes) { - String path = resolve((String) attributes.get("path")); - return FeignClientsRegistrar.getPath(path); - } - - @Nullable - private String getQualifier(@Nullable Map client) { - if (client == null) { - return null; - } - String qualifier = (String) client.get("qualifier"); - if (StringUtils.hasText(qualifier)) { - return qualifier; - } - return null; - } - - @Nullable - private String getClientName(@Nullable Map client) { - if (client == null) { - return null; - } - String value = (String) client.get("contextId"); - if (!StringUtils.hasText(value)) { - value = (String) client.get("value"); - } - if (!StringUtils.hasText(value)) { - value = (String) client.get("name"); - } - if (!StringUtils.hasText(value)) { - value = (String) client.get("serviceId"); - } - if (StringUtils.hasText(value)) { - return value; - } - - throw new IllegalStateException( - "Either 'name' or 'value' must be provided in @" + FeignClient.class.getSimpleName()); - } - - private void registerClientConfiguration(BeanDefinitionRegistry registry, Object name, Object configuration) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(FeignClientSpecification.class); - builder.addConstructorArgValue(name); - builder.addConstructorArgValue(configuration); - registry.registerBeanDefinition(name + "." + FeignClientSpecification.class.getSimpleName(), - builder.getBeanDefinition()); - } - - @Override - public void setEnvironment(Environment environment) { - this.environment = environment; - } - -} diff --git a/pigx-common/pigx-common-sequence/pom.xml b/pigx-common/pigx-common-sequence/pom.xml index 748d47fab..b4aa5d66c 100755 --- a/pigx-common/pigx-common-sequence/pom.xml +++ b/pigx-common/pigx-common-sequence/pom.xml @@ -28,5 +28,9 @@ com.baomidou mybatis-plus-extension + + com.alibaba + druid-spring-boot-3-starter + diff --git a/pigx-upms/pigx-upms-api/src/main/resources/META-INF/spring.factories b/pigx-upms/pigx-upms-api/src/main/resources/META-INF/spring.factories deleted file mode 100755 index 187003309..000000000 --- a/pigx-upms/pigx-upms-api/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,10 +0,0 @@ -com.pig4cloud.pigx.common.feign.PigxFeignAutoConfiguration=\ - com.pig4cloud.pigx.admin.api.feign.RemoteDataScopeService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteClientDetailsService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteLogService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteParamService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteTenantService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteTokenService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteUserService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteDictService,\ - com.pig4cloud.pigx.admin.api.feign.RemoteAuditLogService diff --git a/pigx-visual/pigx-report-platform/src/main/java/com/pig4cloud/pigx/report/PigxReportPlatformApplication.java b/pigx-visual/pigx-report-platform/src/main/java/com/pig4cloud/pigx/report/PigxReportPlatformApplication.java index bab0ce763..491d36a50 100644 --- a/pigx-visual/pigx-report-platform/src/main/java/com/pig4cloud/pigx/report/PigxReportPlatformApplication.java +++ b/pigx-visual/pigx-report-platform/src/main/java/com/pig4cloud/pigx/report/PigxReportPlatformApplication.java @@ -1,5 +1,6 @@ package com.pig4cloud.pigx.report; +import com.pig4cloud.pigx.common.feign.annotation.EnablePigxFeignClients; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,6 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @author lr * @since 2023-04-05 */ +@EnablePigxFeignClients @SpringBootApplication public class PigxReportPlatformApplication {