mirror of
https://github.moeyy.xyz/https://github.com/GeWuYou/forgeboot
synced 2025-10-28 04:26:37 +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 {
|
dependencies {
|
||||||
|
implementation(project(Modules.Core.EXTENSION))
|
||||||
compileOnly(platform(libs.springBootDependencies.bom))
|
compileOnly(platform(libs.springBootDependencies.bom))
|
||||||
compileOnly(platform(libs.springCloudDependencies.bom))
|
compileOnly(platform(libs.springCloudDependencies.bom))
|
||||||
compileOnly(libs.springBootStarter.web)
|
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
|
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.api.RequestIdProvider
|
||||||
import com.gewuyou.forgeboot.trace.impl.config.TraceProperties
|
import com.gewuyou.forgeboot.trace.impl.config.TraceProperties
|
||||||
import com.gewuyou.forgeboot.trace.impl.decorator.RequestIdTaskDecorator
|
import com.gewuyou.forgeboot.trace.impl.decorator.RequestIdTaskDecorator
|
||||||
import com.gewuyou.forgeboot.trace.impl.filter.ReactiveRequestIdFilter
|
import com.gewuyou.forgeboot.trace.impl.filter.ReactiveRequestIdFilter
|
||||||
import com.gewuyou.forgeboot.trace.impl.filter.RequestIdFilter
|
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 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.ConditionalOnMissingBean
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties
|
import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||||
import org.springframework.cloud.openfeign.FeignAutoConfiguration
|
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
import org.springframework.web.reactive.function.client.WebClient
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跟踪自动配置
|
* 跟踪自动配置
|
||||||
@ -39,7 +34,10 @@ open class TraceAutoConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnProperty(name = ["spring.main.web-application-type"], havingValue = "servlet", matchIfMissing = true)
|
@ConditionalOnProperty(name = ["spring.main.web-application-type"], havingValue = "servlet", matchIfMissing = true)
|
||||||
@ConditionalOnMissingBean
|
@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 存在时生效)
|
* Spring WebFlux 过滤器(仅当 Spring WebFlux 存在时生效)
|
||||||
@ -51,8 +49,10 @@ open class TraceAutoConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnProperty(name = ["spring.main.web-application-type"], havingValue = "reactive")
|
@ConditionalOnProperty(name = ["spring.main.web-application-type"], havingValue = "reactive")
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
open fun reactiveRequestIdFilter(traceProperties: TraceProperties): ReactiveRequestIdFilter =
|
open fun reactiveRequestIdFilter(traceProperties: TraceProperties): ReactiveRequestIdFilter {
|
||||||
ReactiveRequestIdFilter(traceProperties)
|
log.info("ReactiveRequestIdFilter 已创建!")
|
||||||
|
return ReactiveRequestIdFilter(traceProperties)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求ID提供者(用于生成请求ID)
|
* 请求ID提供者(用于生成请求ID)
|
||||||
@ -62,20 +62,10 @@ open class TraceAutoConfiguration {
|
|||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean(RequestIdProvider::class)
|
@ConditionalOnMissingBean(RequestIdProvider::class)
|
||||||
open fun traceRequestIdProvider(): TraceRequestIdProvider = TraceRequestIdProvider()
|
open fun traceRequestIdProvider(): TraceRequestIdProvider {
|
||||||
|
log.info("TraceRequestIdProvider 已创建!")
|
||||||
/**
|
return TraceRequestIdProvider()
|
||||||
* Feign 拦截器(仅当 Feign 存在时生效)
|
}
|
||||||
*
|
|
||||||
* 该拦截器用于在Feign客户端中传递请求ID
|
|
||||||
* @param traceProperties 跟踪配置属性
|
|
||||||
* @return FeignRequestIdInterceptor实例
|
|
||||||
*/
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnClass(FeignAutoConfiguration::class)
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
open fun feignRequestIdInterceptor(traceProperties: TraceProperties): FeignRequestIdInterceptor =
|
|
||||||
FeignRequestIdInterceptor(traceProperties)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 线程池装饰器(用于 @Async)
|
* 线程池装饰器(用于 @Async)
|
||||||
@ -86,19 +76,9 @@ open class TraceAutoConfiguration {
|
|||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
open fun requestIdTaskDecorator(traceProperties: TraceProperties): RequestIdTaskDecorator =
|
open fun requestIdTaskDecorator(traceProperties: TraceProperties): RequestIdTaskDecorator {
|
||||||
RequestIdTaskDecorator(traceProperties)
|
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.TraceAutoConfiguration
|
||||||
|
com.gewuyou.forgeboot.trace.autoconfig.WebClientTraceAutoConfiguration
|
||||||
|
com.gewuyou.forgeboot.trace.autoconfig.FeignTraceAutoConfiguration
|
||||||
Loading…
x
Reference in New Issue
Block a user