我开始用Spring学习Java,我写了一些简单的计划任务。
我不理解框架使用的机制,因此应用程序在getBean
调用后不会退出。为什么应用程序继续打印“嗨”?
public class Application {
public static void main(String[] args) {
...
PeriodicTask task = appCtx.getBean(PeriodicTask.class);
}
}
public class PeriodicTask {
@Scheduled(fixedRate = 5000)
public void periodic() {
System.out.println("Hi");
}
}
答案 0 :(得分:3)
鉴于@Scheduled
,我将假设您的ApplicationContext
有一些预定配置。这意味着您正在创建(隐式或显式)生成非守护程序线程的SchedulerExecutorService
。在所有非守护程序线程完成之前,应用程序不会结束。其中一个线程每5000毫秒执行一次periodic
方法。
现在,您可以将ApplicationContext
实例化放在try-with-resources
中。一旦执行离开try
块,ApplicationContext
将关闭,关闭ScheduledExecutorService
并最终终止您的程序。