Spring Integration - 应用程序始终运行

时间:2016-02-10 09:16:04

标签: spring-integration

我正在构建一个需要运行的应用程序(永不关闭)。

所有过程都从一个频道(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);
    }
}

1 个答案:

答案 0 :(得分:1)

如果您的上下文包含<poller/> s,则只需退出而不关闭上下文;它将继续运行,因为默认情况下轮询器线程是非守护进程。

如果你想要更多控制并且能够干净地关闭......

System.out.println("Press 'Enter' to terminate");
System.in.read();
context.close();