Я создал простое приложение для весенней загрузки с запланированным (@Scheduled
) заданием. В этой запланированной задаче я хотел бы вызвать асинхронную функцию с @Async
, но я вижу, что она все еще выполняется в потоке планирования без переключения на другой поток. Я также пытался настроить исполнителя, но не повезло. Вот несколько кодов. Я также уже включил асинхронность в основном классе
public class scheduledService {
@Scheduled(fixedRateString = "${config.scheduleInterval}")
public void pollDataWithFixSchedule() {
AsyncService service = new AsyncService();
service.asyncCall();
service.asyncCall();
service.asyncCall();
asyncCall();
}
}
public class AsyncService {
@Async()
public void asyncCall(){
System.out.printly("Current thread -- {}",Thread.currentThread().getName()))
Thread.sleep(10000);
}
}
@Bean(name = "MyThreadPoolExecutor")
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(7);
executor.setMaxPoolSize(42);
executor.setQueueCapacity(11);
executor.setThreadNamePrefix("MyThreadPoolExecutor-");
executor.initialize();
return executor;
}
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class ScheduledApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(ScheduledApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}