为什么Spring应用程序在main方法的末尾不存在

时间:2014-03-25 20:49:08

标签: java spring scheduled-tasks

我开始用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");
    }
}

1 个答案:

答案 0 :(得分:3)

鉴于@Scheduled,我将假设您的ApplicationContext有一些预定配置。这意味着您正在创建(隐式或显式)生成非守护程序线程的SchedulerExecutorService。在所有非守护程序线程完成之前,应用程序不会结束。其中一个线程每5000毫秒执行一次periodic方法。

现在,您可以将ApplicationContext实例化放在try-with-resources中。一旦执行离开try块,ApplicationContext将关闭,关闭ScheduledExecutorService并最终终止您的程序。