我正在使用Spring Boot,使用
我有一个方法,它被注释为
现在我在
我看不到异步方法的执行。 这里有什么问题?
这是我的应用程序引导类:
这是我的调度器类:
@EnableScheduling
和@EnableAsync
。我有一个方法,它被注释为
@Scheduled
。
我还有几个方法,它们被注释为@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 调用,时间为 2017 年 4 月 4 日星期二下午 4:32:27 IST。
方法二由线程 pool-1-thread-1 调用,时间为 2017 年 4 月 4 日星期二下午 4:32:27 IST。
方法三由线程 pool-1-thread-1 调用,时间为 2017 年 4 月 4 日星期二下午 4:32:27 IST。
@Async
是使用AOP应用的,需要创建代理,你正在从代理内部调用方法,因此AOP将不会被应用。基本上,你的@Async
注解是无用的... - M. Deinum