diff --git a/forgeboot-trace/forgeboot-trace-autoconfigure/build.gradle.kts b/forgeboot-trace/forgeboot-trace-autoconfigure/build.gradle.kts index 76fa179..b57f6cb 100644 --- a/forgeboot-trace/forgeboot-trace-autoconfigure/build.gradle.kts +++ b/forgeboot-trace/forgeboot-trace-autoconfigure/build.gradle.kts @@ -1,5 +1,6 @@ dependencies { + implementation(project(Modules.Core.EXTENSION)) compileOnly(platform(libs.springBootDependencies.bom)) compileOnly(platform(libs.springCloudDependencies.bom)) compileOnly(libs.springBootStarter.web) diff --git a/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/FeignTraceAutoConfiguration.kt b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/FeignTraceAutoConfiguration.kt new file mode 100644 index 0000000..58f4de9 --- /dev/null +++ b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/FeignTraceAutoConfiguration.kt @@ -0,0 +1,34 @@ +package com.gewuyou.forgeboot.trace.autoconfig + +import com.gewuyou.forgeboot.core.extension.log +import com.gewuyou.forgeboot.trace.impl.config.TraceProperties +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration + +/** + *Feign跟踪自动配置 + * + * @since 2025-05-31 22:02:56 + * @author gewuyou + */ +@Configuration +@ConditionalOnClass(name = ["feign.RequestInterceptor"]) +open class FeignTraceAutoConfiguration { + /** + * Feign 拦截器(仅当 Feign 存在时生效) + * + * 该拦截器用于在Feign客户端中传递请求ID + * @param traceProperties 跟踪配置属性 + * @return FeignRequestIdInterceptor实例 + */ + @Bean + @ConditionalOnMissingBean(name = ["feignRequestIdInterceptor"]) + open fun feignRequestIdInterceptor(traceProperties: TraceProperties): Any { + val clazz = Class.forName("com.gewuyou.forgeboot.trace.impl.interceptor.FeignRequestIdInterceptor") + val constructor = clazz.getConstructor(TraceProperties::class.java) + log.info( "创建FeignRequestIdInterceptor实例") + return constructor.newInstance(traceProperties) + } +} \ No newline at end of file diff --git a/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/TraceAutoConfiguration.kt b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/TraceAutoConfiguration.kt index 209c49e..8e526f6 100644 --- a/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/TraceAutoConfiguration.kt +++ b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/TraceAutoConfiguration.kt @@ -1,23 +1,18 @@ package com.gewuyou.forgeboot.trace.autoconfig +import com.gewuyou.forgeboot.core.extension.log import com.gewuyou.forgeboot.trace.api.RequestIdProvider import com.gewuyou.forgeboot.trace.impl.config.TraceProperties import com.gewuyou.forgeboot.trace.impl.decorator.RequestIdTaskDecorator import com.gewuyou.forgeboot.trace.impl.filter.ReactiveRequestIdFilter import com.gewuyou.forgeboot.trace.impl.filter.RequestIdFilter -import com.gewuyou.forgeboot.trace.impl.filter.WebClientRequestIdFilter -import com.gewuyou.forgeboot.trace.impl.interceptor.FeignRequestIdInterceptor import com.gewuyou.forgeboot.trace.impl.provider.TraceRequestIdProvider -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean -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 -import org.springframework.cloud.openfeign.FeignAutoConfiguration import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration -import org.springframework.web.reactive.function.client.WebClient /** * 跟踪自动配置 @@ -39,7 +34,10 @@ open class TraceAutoConfiguration { @Bean @ConditionalOnProperty(name = ["spring.main.web-application-type"], havingValue = "servlet", matchIfMissing = true) @ConditionalOnMissingBean - open fun requestIdFilter(traceProperties: TraceProperties): RequestIdFilter = RequestIdFilter(traceProperties) + open fun requestIdFilter(traceProperties: TraceProperties): RequestIdFilter { + log.info("RequestIdFilter 已创建!") + return RequestIdFilter(traceProperties) + } /** * Spring WebFlux 过滤器(仅当 Spring WebFlux 存在时生效) @@ -51,8 +49,10 @@ open class TraceAutoConfiguration { @Bean @ConditionalOnProperty(name = ["spring.main.web-application-type"], havingValue = "reactive") @ConditionalOnMissingBean - open fun reactiveRequestIdFilter(traceProperties: TraceProperties): ReactiveRequestIdFilter = - ReactiveRequestIdFilter(traceProperties) + open fun reactiveRequestIdFilter(traceProperties: TraceProperties): ReactiveRequestIdFilter { + log.info("ReactiveRequestIdFilter 已创建!") + return ReactiveRequestIdFilter(traceProperties) + } /** * 请求ID提供者(用于生成请求ID) @@ -62,20 +62,10 @@ open class TraceAutoConfiguration { */ @Bean @ConditionalOnMissingBean(RequestIdProvider::class) - open fun traceRequestIdProvider(): TraceRequestIdProvider = TraceRequestIdProvider() - - /** - * Feign 拦截器(仅当 Feign 存在时生效) - * - * 该拦截器用于在Feign客户端中传递请求ID - * @param traceProperties 跟踪配置属性 - * @return FeignRequestIdInterceptor实例 - */ - @Bean - @ConditionalOnClass(FeignAutoConfiguration::class) - @ConditionalOnMissingBean - open fun feignRequestIdInterceptor(traceProperties: TraceProperties): FeignRequestIdInterceptor = - FeignRequestIdInterceptor(traceProperties) + open fun traceRequestIdProvider(): TraceRequestIdProvider { + log.info("TraceRequestIdProvider 已创建!") + return TraceRequestIdProvider() + } /** * 线程池装饰器(用于 @Async) @@ -86,19 +76,9 @@ open class TraceAutoConfiguration { */ @Bean @ConditionalOnMissingBean - open fun requestIdTaskDecorator(traceProperties: TraceProperties): RequestIdTaskDecorator = - RequestIdTaskDecorator(traceProperties) - - /** - * 配置 WebClient 并自动添加请求 ID 过滤器(仅在 WebClient 已存在时引入) - */ - @Bean - @ConditionalOnBean(WebClient.Builder::class) // 如果 WebClient.Builder 已存在,则添加过滤器 - open fun webClientRequestIdFilter( - webClientBuilder: WebClient.Builder, - traceProperties: TraceProperties - ): WebClient.Builder { - // 在现有 WebClient 配置中添加请求 ID 过滤器 - return webClientBuilder.filter(WebClientRequestIdFilter(traceProperties)) + open fun requestIdTaskDecorator(traceProperties: TraceProperties): RequestIdTaskDecorator { + log.info("RequestIdTaskDecorator 已创建!") + return RequestIdTaskDecorator(traceProperties) } + } diff --git a/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/WebClientTraceAutoConfiguration.kt b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/WebClientTraceAutoConfiguration.kt new file mode 100644 index 0000000..1163cec --- /dev/null +++ b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/kotlin/com/gewuyou/forgeboot/trace/autoconfig/WebClientTraceAutoConfiguration.kt @@ -0,0 +1,43 @@ +package com.gewuyou.forgeboot.trace.autoconfig + +import com.gewuyou.forgeboot.core.extension.log +import com.gewuyou.forgeboot.trace.impl.config.TraceProperties +import com.gewuyou.forgeboot.trace.impl.filter.WebClientRequestIdFilter +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration + +/** + * Web客户端跟踪自动配置 + * + * 该配置类用于自动配置Web客户端的请求ID过滤器,以实现请求跟踪功能 + * 它依赖于特定条件,如类的存在和Bean的定义,以确保在适当的时候进行配置 + * + * @since 2025-05-31 21:59:02 + * @author gewuyou + */ +@Configuration +@ConditionalOnClass(name = ["org.springframework.web.reactive.function.client.WebClient\$Builder"]) +open class WebClientTraceAutoConfiguration { + + /** + * 配置Web客户端的请求ID过滤器 + * + * 该方法在满足条件时被调用,它获取WebClient.Builder实例并应用请求ID过滤器, + * 以便在发出请求时添加请求ID信息这对于跟踪请求跨多个服务非常有用 + * + * @param webClientBuilder Web客户端构建器,用于配置过滤器 + * @param traceProperties 跟踪属性配置,用于定制跟踪行为 + * @return 配置后的WebClient.Builder实例 + */ + @Bean + @ConditionalOnBean(name = ["webClientBuilder"]) + open fun webClientRequestIdFilter( + webClientBuilder: org.springframework.web.reactive.function.client.WebClient.Builder, + traceProperties: TraceProperties + ): org.springframework.web.reactive.function.client.WebClient.Builder { + log .info("配置Web客户端的请求ID过滤器") + return webClientBuilder.filter(WebClientRequestIdFilter(traceProperties)) + } +} diff --git a/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 59dd799..1657c1a 100644 --- a/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/forgeboot-trace/forgeboot-trace-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1,3 @@ -com.gewuyou.forgeboot.trace.autoconfig.TraceAutoConfiguration \ No newline at end of file +com.gewuyou.forgeboot.trace.autoconfig.TraceAutoConfiguration +com.gewuyou.forgeboot.trace.autoconfig.WebClientTraceAutoConfiguration +com.gewuyou.forgeboot.trace.autoconfig.FeignTraceAutoConfiguration \ No newline at end of file