mirror of
https://github.moeyy.xyz/https://github.com/GeWuYou/forgeboot
synced 2025-10-28 01:36:38 +08:00
refactor(trace): Refactoring the TraceAutoConfiguration class
- Separate Feign and WebClient-related configurations into separate configuration classes - Added FeignTraceAutoConfiguration and WebClientTraceAutoConfiguration classes - Optimized the use of conditional annotations and improved configuration flexibility - Added logging to facilitate tracking of configuration loading
This commit is contained in:
parent
050c611dd6
commit
567e7cc2b7
@ -1,5 +1,6 @@
|
||||
|
||||
dependencies {
|
||||
implementation(project(Modules.Core.EXTENSION))
|
||||
compileOnly(platform(libs.springBootDependencies.bom))
|
||||
compileOnly(platform(libs.springCloudDependencies.bom))
|
||||
compileOnly(libs.springBootStarter.web)
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
open fun requestIdTaskDecorator(traceProperties: TraceProperties): RequestIdTaskDecorator {
|
||||
log.info("RequestIdTaskDecorator 已创建!")
|
||||
return 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))
|
||||
}
|
||||
}
|
||||
|
||||
@ -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))
|
||||
}
|
||||
}
|
||||
@ -1 +1,3 @@
|
||||
com.gewuyou.forgeboot.trace.autoconfig.TraceAutoConfiguration
|
||||
com.gewuyou.forgeboot.trace.autoconfig.WebClientTraceAutoConfiguration
|
||||
com.gewuyou.forgeboot.trace.autoconfig.FeignTraceAutoConfiguration
|
||||
Loading…
x
Reference in New Issue
Block a user