Пользовательский асинхронный исполнитель с трассировкой в ​​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?

0 ответов

Другие вопросы по тегам