我正在构建一个需要运行的应用程序(永不关闭)。
所有过程都从一个频道(rootChannel
)开始,现在我开始发送一条消息。
在Spring Integration的github存储库中查看示例我使用了相同的结构但是在发送消息(下面标有// HERE
)后,应用程序继续context.close()
(这是正确的,因为我“不是”阻止它“)
我的问题是:如何确保应用程序永不停止? (或者只有当我杀了它们时才停止)
我需要这个,因为我的应用程序是一个监视器,因此需要运行:
MainClass.java
public class Application {
public static void main(String[] args) throws Exception {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml", Application.class);
MessageChannel messageChannel = (MessageChannel) context.getBean("rootChannel");
GenericMessage<Document> message = createXmlMessageFromResource("/META-INF/spring/source-file-to-parse.xml");
boolean b = message.send(probeMessage); // HERE I START
context.close();
}
private static GenericMessage<Document> createXmlMessageFromResource(String path) throws Exception {
Resource res = new ClassPathResource(path);
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(false);
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document doc = builder.parse(res.getInputStream());
return new GenericMessage<Document>(doc);
}
}
答案 0 :(得分:1)
如果您的上下文包含<poller/>
s,则只需退出而不关闭上下文;它将继续运行,因为默认情况下轮询器线程是非守护进程。
如果你想要更多控制并且能够干净地关闭......
System.out.println("Press 'Enter' to terminate");
System.in.read();
context.close();