Пользовательский асинхронный исполнитель с трассировкой в Spring Boot 3
Я переношу проект Spring Boot на версию 3. В проекте используются асинхронная задача и трассировка.
Следуя документации на вики Micrometer GitHub , мы попытались определить исполнителя Async следующим образом:
@Configuration(proxyBeanMethods = false)
@EnableAsync
class EventProcessingConfig {
@Bean("eventsPublishExecutor")
fun eventsPublishExecutor(): Executor {
val executor =
object : ThreadPoolTaskExecutor() {
override fun initializeExecutor(
threadFactory: ThreadFactory,
rejectedExecutionHandler: RejectedExecutionHandler
): ExecutorService {
val executorService = super.initializeExecutor(threadFactory,
rejectedExecutionHandler)
return ContextExecutorService.wrap(executorService, ContextSnapshot::captureAll)
}
}
with(executor) {
setThreadNamePrefix("processing-events-")
setWaitForTasksToCompleteOnShutdown(true)
setAwaitTerminationSeconds(30)
initialize()
}
return executor
Тем не менее, мы все еще теряем трассировку. И замена создания bean-компонента приведенным ниже кодом заставляет все работать так, как ожидалось (хотя и без настройки).
return ContextExecutorService.wrap(
Executors.newSingleThreadExecutor(),
ContextSnapshot::captureAll
)
Знаете ли вы, что не так или чего не хватает в первом коде Spring Boot 3?