Я переношу свой проект с версии Spring boot 2.7.4 на версию 3.2.2. мне нужно использовать микрометр вместо сыщика, как мне отредактировать упомянутый ниже BEAN «Executor» для асинхронного режима?
Что мне следует использовать вместо класса LazyTraceExecutor?
@Bean("asyncExecutor")
public Executor getAsyncExecutor(BeanFactory beanFactory) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setThreadNamePrefix("Async-");
executor.setTaskDecorator(new ContextDecorator());
executor.initialize();
return new LazyTraceExecutor(beanFactory, executor);
}
Вам не нужна замена LazyTraceExecutor.
Следующее должно работать нормально:
@Bean
public TaskDecorator decorator() {
return new ContextPropagatingTaskDecorator();
}
@Bean
ThreadPoolTaskExecutor executor(ThreadPoolTaskExecutorBuilder builder, TaskDecorator td) {
return builder.threadNamePrefix("GTX-")
.taskDecorator(td)
.build();
}
Да. Вы можете попробовать это.
Я переписал конфигурацию следующим образом:
@Configuration
public class AppConfiguration {
@Bean
public ThreadPoolTaskExecutor micrometerThreadPoolTaskExecutor(AppProperties appConfig) {
return new TaskExecutorBuilder()
.maxPoolSize(appConfig.getThreadPoolMaxSize())
.corePoolSize(appConfig.getThreadPoolCoreSize())
.threadNamePrefix(appConfig.getThreadPoolPrefix())
.build();
}
}
@Configuration(proxyBeanMethods = false)
public class TracingAsyncConfiguration implements AsyncConfigurer {
private final ThreadPoolTaskExecutor micrometerTaskExecutor;
public TracingAsyncConfiguration(@Qualifier("micrometerThreadPoolTaskExecutor") ThreadPoolTaskExecutor micrometerTaskExecutor) {
this.micrometerTaskExecutor = micrometerTaskExecutor;
}
@Override
public Executor getAsyncExecutor() {
return ContextExecutorService.wrap(micrometerTaskExecutor.getThreadPoolExecutor(), ContextSnapshotFactory.builder().build()::captureAll);
}
}
Очень похожий вопрос обсуждался здесь
Ранее я решил проблему, сделав так, как вы сказали, но забыл вникнуть в тему. В любом случае, спасибо за интерес.
Спасибо за ответ. Будут ли асинхронные задания собирать информацию для отслеживания?