Невозможно использовать @Async при весенней загрузкеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Невозможно использовать @Async при весенней загрузке

Сообщение Anonymous »

Я хочу использовать асинхронный механизм Spring Boot, вот мой код.

Код: Выделить всё

@Slf4j
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {

private static final int MAX_POOL_SIZE = 50;

private static final int CORE_POOL_SIZE = 20;

@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setBeanName("taskExecutor");
taskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
taskExecutor.setCorePoolSize(CORE_POOL_SIZE);
taskExecutor.setThreadNamePrefix("async-task-thread-pool");
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
taskExecutor.setAwaitTerminationSeconds(60 * 10);
taskExecutor.setRejectedExecutionHandler(
(r, executor) -> log.warn("current thread pool is full, reject to invoke."));
taskExecutor.initialize();
return taskExecutor;
}

@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (ex, method, params) ->
{
log.error("invoke async method occurs error. method: {}, params: {}",
method.getName(), JSON.toJSONString(params), ex);
throw new RuntimeException();
};
}

}
И я добавляю аннотацию @Async к методу другого класса.

Код: Выделить всё

@Override
public Future getResult(String name);
Но когда я вызываю метод getResult(), он сообщает, что bean-компонент с именем 'taskExecutor' не доступен: для квалификатора 'taskExecutor' не найден соответствующий bean-компонент Executor - ни совпадение квалификатора, ни имя bean-компонента!.

И затем я нахожу эту страницу: https://www.baeldung.com/spring-async. Я следую руководству на этой странице — удалите аннотацию @EnableAsync в Application.class и добавьте в AsyncConfig.class. Но все равно получил то же сообщение об ошибке. Кажется, метод setBeanName() не действует. Является ли мое использование неправильным?

Кстати, я прочитал документ API EnableAsync, там написано


Примечание. В приведенном выше примере {@code ThreadPoolTaskExecutor} не является полностью управляемым bean-компонентом Spring. Добавьте аннотацию {@code @Bean} к методу {@code getAsyncExecutor()}

если вам нужен полностью управляемый компонент. В таких обстоятельствах больше нет необходимости
вручную вызывать метод {@code executor.initialize()}, поскольку он будет вызываться
автоматически при инициализации компонента.


Что означает не полностью управляемый компонент Spring? Какая часть компонента не управляется Spring?

Подробнее здесь: https://stackoverflow.com/questions/541 ... pring-boot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»