Я использую загрузку Spring с @EnableScheduling
и @EnableAsync
.
У меня есть метод, помеченный знаком @Scheduled
. У меня есть еще несколько методов, помеченных знаком @Async
.
Теперь я вызываю эти @Async
методы в @Scheduled
методе и распечатываю имя текущего потока в методах async. Я вижу, что все они имеют одно и то же имя потока, которое на самом деле является потоком, выполняющим метод @Scheduled
.
Я не вижу выполнения асинхронного метода. Что здесь не так?
Вот мой класс загрузки приложения
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class ApplicationBoot {
public static void main(String[] args) {
SpringApplication.run(ApplicationBoot.class, args);
}
}
Вот мой класс планировщика
@Component
public class TaskScheduler {
private static final Logger logger = Logger.getLogger(TaskScheduler.class);
@Scheduled(fixedDelay = 10000)
public void ScheduledMethod() {
methodOne();
methodTwo();
methodThree();
}
@Async
private void methodOne() {
logger.info("Method one called by Thread : " + Thread.currentThread().getName() + " at " + new Date());
}
@Async
private void methodTwo() {
logger.info("Method two called by Thread : " + Thread.currentThread().getName() + " at " + new Date());
}
@Async
private void methodThree() {
logger.info("Method three called by Thread : " + Thread.currentThread().getName() + " at " + new Date());
}
}
Вывод
Первый метод, вызываемый потоком: pool-1-thread-1 во вторник, 04 апреля, 16:32:27 IST 2017
Второй метод, вызываемый потоком: pool-1-thread-1 во вторник, 04 апреля, 16:32:27 IST 2017 г.
Третий метод, вызываемый потоком: pool-1-thread-1 во вторник, 04 апреля, 16:32:27 IST 2017 г.
@Async
применяется с использованием AOP для создания прокси, вы вызываете методы изнутри прокси, поэтому AOP не будет применяться. В основном ваши@Async
аннотации бесполезны ... - person M. Deinum   schedule 04.04.2017@Scheduled
или нет). - person M. Deinum   schedule 04.04.2017