春季申请不退出

时间:2014-11-08 04:06:46

标签: java spring

我有以下代码:

public class TutorialSender {

    public static void main(String[] args) throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("rabbit-sender-context.xml");//loading beans
        AmqpTemplate aTemplate = (AmqpTemplate) context.getBean("tutorialTemplate");// getting a reference to the sender bean
        JSONObject obj = new JSONObject();
        obj.put("messageType", "ETL:ToFile");

        for (int i = 0; i < 100; i++) {
            aTemplate.convertAndSend("ETLQueue",obj.toString());// send
          //  aTemplate.convertAndSend("Message # " + i + " on " + new Date());// send
        }

        System.out.println("send is done");
    }

}

然后我运行应用程序,它运行到最后一行,我可以看到“发送完成”打印,但应用程序不会退出。是因为春天阻止它退出吗?我怎么能辞职?

更新:我们不能直接使用context.close()因为有这么close()函数,而是需要使用以下

 ((ClassPathXmlApplicationContext) context).close();

2 个答案:

答案 0 :(得分:2)

Spring应用程序上下文保持打开状态,因此即使主线程结束,其他线程仍然可用且可运行。用context.close()关闭上下文以彻底关闭事物。

此外,请考虑将Spring Boot用于未来的程序。您仍然需要主动关闭上下文以自动终止程序,但设置更容易一些。

答案 1 :(得分:-2)

Spring可能会运行一些线程,这些线程在main方法完成时尚未关闭。致电System.exit(0)将退出该计划。