我有以下代码:
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();
答案 0 :(得分:2)
Spring应用程序上下文保持打开状态,因此即使主线程结束,其他线程仍然可用且可运行。用context.close()
关闭上下文以彻底关闭事物。
此外,请考虑将Spring Boot用于未来的程序。您仍然需要主动关闭上下文以自动终止程序,但设置更容易一些。
答案 1 :(得分:-2)
Spring可能会运行一些线程,这些线程在main
方法完成时尚未关闭。致电System.exit(0)
将退出该计划。