From a2150877fea5ca7a63afde8acc3437ea1c8f7ddf Mon Sep 17 00:00:00 2001 From: smallchill Date: Wed, 2 Jul 2025 23:36:40 +0800 Subject: [PATCH] =?UTF-8?q?:tada:=20=E8=A7=A3=E5=86=B3=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=BA=95=E5=B1=82=E7=BB=84=E4=BB=B6=E5=90=8E=E4=BA=A7=E7=94=9F?= =?UTF-8?q?=E7=9A=84=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/static/favicon.ico | Bin 67646 -> 16958 bytes .../core/launch/BladeApplication.java | 13 +- .../core/launch/constant/NacosConstant.java | 31 +++- .../props/BladeLoadBalancerProperties.java | 2 - .../extension/Knife4jOpenApiCustomizer.java | 159 ++++++++++++++++++ .../swagger/SwaggerLauncherServiceImpl.java | 2 - ...gblade.core.launch.service.LauncherService | 1 + pom.xml | 5 + 8 files changed, 201 insertions(+), 12 deletions(-) create mode 100644 blade-starter-swagger/src/main/java/com/github/xiaoymin/knife4j/spring/extension/Knife4jOpenApiCustomizer.java create mode 100644 blade-starter-swagger/src/main/resources/META-INF/services/org.springblade.core.launch.service.LauncherService diff --git a/blade-core-boot/src/main/resources/static/favicon.ico b/blade-core-boot/src/main/resources/static/favicon.ico index 5e2aec953da8a73002971c1a60fa9c5f33a9c3b7..cb67ccbe9f936d4c8eceb02078f48bd79165b425 100644 GIT binary patch literal 16958 zcmeHNX;4&G7Jgy_&AutS&}@pxqA@B_1_&q!qCrJL#5GQ|kQn!UqBE(Oid9TW;xfiv zqsC}l5G0DwEH1cDX3CmMO<8d&HIN}!@B@erI+wnF&4_+*+?-`_q4`WWbAppSt*2402% zeSc?fy_0hq^vgWfEA9nmy@#t?bME+D8sOvqXN;Hdxn2RT2N1xibJMw8+^}vFH8!@= zrAzgcKJHh9^TT_1RP&eh{dG>jdAxi{g}~1ES!PU|!T3`(5AZnvkn0LC?wMUOn;IHg zEcp32DOK%eTh<+)zRps)f5<;COHUw zkvM>D9dfG-vJ1!WLJTkR+)sHA&;OcL>jZwz_fpgV_({R>*}z^aurvNw-};AT=hBG$YI5h3CK95!UAz!w-Z zj>c466xf-A*zD!x;o&c?1%#)Ne@H@)9032yqQa^4)&2YQrw0#&oH}uW+?`z?As(E1 z^6Tfg4lYU{Kkz&=?xf-!#M5&C4bE9D@?q5CGvpsSj5+u#u!P(571wHy96V^j zE;&d}5YI*1d&UvY!S7OF>hud50(>r{*SSzw${Y0R;?tH~5cz+=Nv&>!Rd7{vr4JiXr#95 z*KIhcs{B29xQI362yAGa1Lw8eA0^G)fxSYF*e`Kh3>zFzexBZRX#ak@98_-K&U*mn z>45g*z&f%QIU`?e1x2YVfz1Nb)uauf0o zh!K)5^8)XLqA}*RomRcGoNnE?K~0T~f&=dP{JnhW=)psRgPX_&YYw*k?mfc3lX>HJ z1Ja~JY4}wX9~;+s;^;BDd+QeM-@BJ0Lc+dB?(%N~2FN!Ml69WzoaBJ-pOiC^0=#|c z*x|!=Ie2f&R>?sX>^Ky5b_PB@Ja^`dO%3~G_a2_JJCH|^c9z%E(gi)H4%#g9%LJ7(elHmq}D)4KJNgAe(89pwXGzOFfc!Djvs?c2}3A_tuFrJtw+f`jag zOdAf`%=O^*&6~v62KxHbXP+Lo%fY%;t0f2TI|>KzqbwyMkuID)E9UDYe2d}CxLze#P7klKj2uhjsvctu*1UdN~P(aRl|=`$U`qT zcaHaam}|?ts~yAjRP?v)Ia%4yksPem0%o<3l7qbQIduQd9ZUUS?A#x4+>aeK zhC&7e(ifkfw#&idHy23`R;ul5VJtX6J;=|=waWp&7fc;Fitv7nc#Y+HV4Vvb2XD@s zkKf%yJy@m%%xWJ^95}ZZ&5~16x>^&9xw+*YWrFkOAcmEoo<(dhAUSn zJ|>RhqN3^QmzTS7!0(wRU|$J4%t4_RFspr(9B^&77YFsgJvb_chQ!1Y^TF!^_YAT> z;CC#%?}iE(aX{v4$v-4_q769NcMZqx9GCo2-*_gCpa7o^M#w zv2WD1m(DD<%q`C`_rqKdF4tb7m~GAH7s&zdd(<58oL{|sg*fL~TF^Jk9N?Y_&rXwew5%lu^ULPg zaKQ7-Ju&kj`UKQN*-P^~6+E|I%ebw5mmDmdJI}&_oNJB?UjMlU${Z*u68}&8fVB;+ z9}5n!E-aeAz_K<<4%C`!0@i?5tz%aE4@~0Sy0^Or4UHX)o-d0Q%$ZBS*|3rRuxl69 zT(}@&VMk>p$NzWg=X=8#xFR6aAZsD}z=;w1@6e1{{Fch^68RY7-5W5!2nO^`?!cQ2 z9*UsXLk>U;FY;{PJ$(%HG0?}rFNFd6e?Q-vA8a=3-n!v?Bati z#ixVMbSbVKkCR3+pZ=oE4FxH|eeBZ)h@q!($~< zTzI1R2;HH$3jI{+&$=s3>Bssh{+l)H4$SZt)-H-L(BY#915YEj3f+~_WH$8JZ0L!} z5S|o<;F$?)m&p)3Gkan(0BA37fITAm5t?cI*bMcFS$9}S&EVU?jY(6JS(6cGU+D8c Dwmo3m literal 67646 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 I4ai9S8+?=QG5`Po diff --git a/blade-core-launch/src/main/java/org/springblade/core/launch/BladeApplication.java b/blade-core-launch/src/main/java/org/springblade/core/launch/BladeApplication.java index 4da56e0..ebd77d0 100644 --- a/blade-core-launch/src/main/java/org/springblade/core/launch/BladeApplication.java +++ b/blade-core-launch/src/main/java/org/springblade/core/launch/BladeApplication.java @@ -27,7 +27,6 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.function.Function; -import java.util.stream.Collectors; /** * 项目启动器,搞定环境变量问题 @@ -88,9 +87,9 @@ public class BladeApplication { // 同时存在dev、test、prod环境时 throw new RuntimeException("同时存在环境变量:[" + StringUtils.arrayToCommaDelimitedString(activeProfiles) + "]"); } - String startJarPath = BladeApplication.class.getResource("/").getPath().split("!")[0]; + String startJarPath = Objects.requireNonNull(BladeApplication.class.getResource("/")).getPath().split("!")[0]; String activePros = joinFun.apply(activeProfileList.toArray()); - System.out.println(String.format("----启动中,读取到的环境变量:[%s],jar地址:[%s]----", activePros, startJarPath)); + System.out.printf("----启动中,读取到的环境变量:[%s],jar地址:[%s]----%n", activePros, startJarPath); Properties props = System.getProperties(); props.setProperty("spring.application.name", appName); props.setProperty("spring.profiles.active", profile); @@ -102,15 +101,15 @@ public class BladeApplication { props.setProperty("blade.dev-mode", profile.equals(AppConstant.PROD_CODE) ? "false" : "true"); props.setProperty("blade.service.version", AppConstant.APPLICATION_VERSION); props.setProperty("spring.main.allow-bean-definition-overriding", "true"); - props.setProperty("spring.cloud.nacos.config.prefix", NacosConstant.NACOS_CONFIG_PREFIX); - props.setProperty("spring.cloud.nacos.config.file-extension", NacosConstant.NACOS_CONFIG_FORMAT); props.setProperty("spring.cloud.sentinel.transport.dashboard", SentinelConstant.SENTINEL_ADDR); props.setProperty("spring.cloud.alibaba.seata.tx-service-group", appName.concat(NacosConstant.NACOS_GROUP_SUFFIX)); + props.setProperty("spring.config.import", String.join(",", NacosConstant.dataId(), NacosConstant.dataId(profile), NacosConstant.dataId(appName, profile))); + props.setProperty("nacos.logging.default.config.enabled", "false"); // 加载自定义组件 List launcherList = new ArrayList<>(); ServiceLoader.load(LauncherService.class).forEach(launcherList::add); SpringApplicationBuilder finalBuilder = builder; - launcherList.stream().sorted(Comparator.comparing(LauncherService::getOrder)).collect(Collectors.toList()) + launcherList.stream().sorted(Comparator.comparing(LauncherService::getOrder)).toList() .forEach(launcherService -> launcherService.launcher(finalBuilder, appName, profile)); return finalBuilder; } @@ -122,7 +121,7 @@ public class BladeApplication { */ public static boolean isLocalDev() { String osName = System.getProperty("os.name"); - return StringUtils.hasText(osName) && !(AppConstant.OS_NAME_LINUX.equals(osName.toUpperCase())); + return StringUtils.hasText(osName) && !(AppConstant.OS_NAME_LINUX.equalsIgnoreCase(osName)); } } diff --git a/blade-core-launch/src/main/java/org/springblade/core/launch/constant/NacosConstant.java b/blade-core-launch/src/main/java/org/springblade/core/launch/constant/NacosConstant.java index 98191ae..05af223 100644 --- a/blade-core-launch/src/main/java/org/springblade/core/launch/constant/NacosConstant.java +++ b/blade-core-launch/src/main/java/org/springblade/core/launch/constant/NacosConstant.java @@ -22,6 +22,16 @@ package org.springblade.core.launch.constant; */ public interface NacosConstant { + /** + * optional + */ + String OPTIONAL = "optional"; + + /** + * nacos + */ + String NACOS = "nacos"; + /** * nacos 地址 */ @@ -57,6 +67,25 @@ public interface NacosConstant { */ String NACOS_CONFIG_GROUP = "DEFAULT_GROUP"; + /** + * 服务默认加载的配置 + * + * @return dataId + */ + static String dataId() { + return OPTIONAL + ":" + NACOS + ":" + NACOS_CONFIG_PREFIX + "." + NACOS_CONFIG_FORMAT; + } + + /** + * 服务默认加载的配置 + * + * @param profile 环境变量 + * @return dataId + */ + static String dataId(String profile) { + return OPTIONAL + ":" + NACOS + ":" + NACOS_CONFIG_PREFIX + "-" + profile + "." + NACOS_CONFIG_FORMAT; + } + /** * 构建服务对应的 dataId * @@ -77,7 +106,7 @@ public interface NacosConstant { * @return dataId */ static String dataId(String appName, String profile, String format) { - return appName + "-" + profile + "." + format; + return OPTIONAL + ":" + NACOS + ":" + appName + "-" + profile + "." + format; } } diff --git a/blade-starter-loadbalancer/src/main/java/org/springblade/core/loadbalancer/props/BladeLoadBalancerProperties.java b/blade-starter-loadbalancer/src/main/java/org/springblade/core/loadbalancer/props/BladeLoadBalancerProperties.java index c40cc4c..3ca1567 100644 --- a/blade-starter-loadbalancer/src/main/java/org/springblade/core/loadbalancer/props/BladeLoadBalancerProperties.java +++ b/blade-starter-loadbalancer/src/main/java/org/springblade/core/loadbalancer/props/BladeLoadBalancerProperties.java @@ -18,7 +18,6 @@ package org.springblade.core.loadbalancer.props; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.context.config.annotation.RefreshScope; import java.util.ArrayList; import java.util.List; @@ -30,7 +29,6 @@ import java.util.List; */ @Getter @Setter -@RefreshScope @ConfigurationProperties(BladeLoadBalancerProperties.PROPERTIES_PREFIX) public class BladeLoadBalancerProperties { public static final String PROPERTIES_PREFIX = "blade.loadbalancer"; diff --git a/blade-starter-swagger/src/main/java/com/github/xiaoymin/knife4j/spring/extension/Knife4jOpenApiCustomizer.java b/blade-starter-swagger/src/main/java/com/github/xiaoymin/knife4j/spring/extension/Knife4jOpenApiCustomizer.java new file mode 100644 index 0000000..621788c --- /dev/null +++ b/blade-starter-swagger/src/main/java/com/github/xiaoymin/knife4j/spring/extension/Knife4jOpenApiCustomizer.java @@ -0,0 +1,159 @@ +/* + * Copyright © 2017-2023 Knife4j(xiaoymin@foxmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package com.github.xiaoymin.knife4j.spring.extension; + +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import com.github.xiaoymin.knife4j.core.conf.ExtensionsConstants; +import com.github.xiaoymin.knife4j.core.conf.GlobalConstants; +import com.github.xiaoymin.knife4j.spring.configuration.Knife4jProperties; +import com.github.xiaoymin.knife4j.spring.configuration.Knife4jSetting; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.models.OpenAPI; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ArrayUtils; +import org.springdoc.core.customizers.GlobalOpenApiCustomizer; +import org.springdoc.core.properties.SpringDocConfigProperties; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; +import org.springframework.core.type.filter.AnnotationTypeFilter; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RestController; + +import java.lang.annotation.Annotation; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 增强扩展属性支持 + * + * @author xiaoymin@foxmail.com + * 2022/12/11 22:40 + * @since 4.1.0 + */ +@Slf4j +@AllArgsConstructor +public class Knife4jOpenApiCustomizer implements GlobalOpenApiCustomizer { + + final Knife4jProperties knife4jProperties; + final SpringDocConfigProperties properties; + + @Override + public void customise(OpenAPI openApi) { + log.debug("Knife4j OpenApiCustomizer"); + if (knife4jProperties.isEnable()) { + Knife4jSetting setting = knife4jProperties.getSetting(); + OpenApiExtensionResolver openApiExtensionResolver = new OpenApiExtensionResolver(setting, knife4jProperties.getDocuments()); + // 解析初始化 + openApiExtensionResolver.start(); + Map objectMap = new HashMap<>(); + objectMap.put(GlobalConstants.EXTENSION_OPEN_SETTING_NAME, setting); + objectMap.put(GlobalConstants.EXTENSION_OPEN_MARKDOWN_NAME, openApiExtensionResolver.getMarkdownFiles()); + openApi.addExtension(GlobalConstants.EXTENSION_OPEN_API_NAME, objectMap); + addOrderExtension(openApi); + } + } + + /** + * 往OpenAPI内tags字段添加x-order属性 + * + * @param openApi openApi + */ + private void addOrderExtension(OpenAPI openApi) { + if (CollectionUtils.isEmpty(properties.getGroupConfigs())) { + return; + } + // 获取包扫描路径 + Set packagesToScan = + properties.getGroupConfigs().stream() + .map(SpringDocConfigProperties.GroupConfig::getPackagesToScan) + .filter(toScan -> !CollectionUtils.isEmpty(toScan)) + .flatMap(List::stream) + .collect(Collectors.toSet()); + if (CollectionUtils.isEmpty(packagesToScan)) { + return; + } + // 扫描包下被ApiSupport注解的RestController Class + Set> classes = + packagesToScan.stream() + .map(packageToScan -> scanPackageByAnnotation(packageToScan, RestController.class)) + .flatMap(Set::stream) + .filter(clazz -> clazz.isAnnotationPresent(ApiSupport.class)) + .collect(Collectors.toSet()); + if (!CollectionUtils.isEmpty(classes)) { + // ApiSupport oder值存入tagSortMap + Map tagOrderMap = new HashMap<>(); + classes.forEach( + clazz -> { + Tag tag = getTag(clazz); + if (Objects.nonNull(tag)) { + ApiSupport apiSupport = clazz.getAnnotation(ApiSupport.class); + tagOrderMap.putIfAbsent(tag.name(), apiSupport.order()); + } + }); + // 往openApi tags字段添加x-order增强属性 + if (openApi.getTags() != null) { + openApi + .getTags() + .forEach( + tag -> { + if (tagOrderMap.containsKey(tag.getName())) { + tag.addExtension( + ExtensionsConstants.EXTENSION_ORDER, tagOrderMap.get(tag.getName())); + } + }); + } + } + } + + private Tag getTag(Class clazz) { + // 从类上获取 + Tag tag = clazz.getAnnotation(Tag.class); + if (Objects.isNull(tag)) { + // 从接口上获取 + Class[] interfaces = clazz.getInterfaces(); + if (ArrayUtils.isNotEmpty(interfaces)) { + for (Class interfaceClazz : interfaces) { + Tag anno = interfaceClazz.getAnnotation(Tag.class); + if (Objects.nonNull(anno)) { + tag = anno; + break; + } + } + } + } + return tag; + } + + private Set> scanPackageByAnnotation( + String packageName, final Class annotationClass) { + ClassPathScanningCandidateComponentProvider scanner = + new ClassPathScanningCandidateComponentProvider(false); + scanner.addIncludeFilter(new AnnotationTypeFilter(annotationClass)); + Set> classes = new HashSet<>(); + for (BeanDefinition beanDefinition : scanner.findCandidateComponents(packageName)) { + try { + Class clazz = Class.forName(beanDefinition.getBeanClassName()); + classes.add(clazz); + } catch (ClassNotFoundException ignore) { + + } + } + return classes; + } +} diff --git a/blade-starter-swagger/src/main/java/org/springblade/core/swagger/SwaggerLauncherServiceImpl.java b/blade-starter-swagger/src/main/java/org/springblade/core/swagger/SwaggerLauncherServiceImpl.java index 1269003..3da0b2d 100644 --- a/blade-starter-swagger/src/main/java/org/springblade/core/swagger/SwaggerLauncherServiceImpl.java +++ b/blade-starter-swagger/src/main/java/org/springblade/core/swagger/SwaggerLauncherServiceImpl.java @@ -15,7 +15,6 @@ */ package org.springblade.core.swagger; -import net.dreamlu.mica.auto.annotation.AutoService; import org.springblade.core.launch.constant.AppConstant; import org.springblade.core.launch.service.LauncherService; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -28,7 +27,6 @@ import java.util.Properties; * * @author Chill */ -@AutoService(LauncherService.class) public class SwaggerLauncherServiceImpl implements LauncherService { @Override public void launcher(SpringApplicationBuilder builder, String appName, String profile) { diff --git a/blade-starter-swagger/src/main/resources/META-INF/services/org.springblade.core.launch.service.LauncherService b/blade-starter-swagger/src/main/resources/META-INF/services/org.springblade.core.launch.service.LauncherService new file mode 100644 index 0000000..03ce0b3 --- /dev/null +++ b/blade-starter-swagger/src/main/resources/META-INF/services/org.springblade.core.launch.service.LauncherService @@ -0,0 +1 @@ +org.springblade.core.swagger.SwaggerLauncherServiceImpl diff --git a/pom.xml b/pom.xml index 8706569..826c257 100644 --- a/pom.xml +++ b/pom.xml @@ -390,6 +390,11 @@ springdoc-openapi-starter-webflux-ui 2.8.9 + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.8.9 + io.protostuff