Java主要方法应该用于独立应用程序(对于Spring JMS)?

Bra*_*don 23 java spring jms

我有兴趣创建一个Spring独立应用程序,它将运行并等待使用Spring JMS从ActiveMQ队列接收消息.我搜索过很多地方,但找不到一种实现这种独立应用程序主方法的一致方法.Spring独立应用程序的示例似乎很少.我看过Tomcat,JBoss,ActiveMQ以及网络上的其他例子,但我还没有得出结论......

实现Java应用程序的主方法(特别是Spring with JMS)的最佳实践是什么?

更新:以下是一个例子:http://forum.springsource.org/showthread.php?t = 48197 这是最好的方法吗?

public static void main(String args[]) {
        try {
           ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
            . . . . .
            Object lock = new Object();
            synchronized (lock) {
                lock.wait();  
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
}
Run Code Online (Sandbox Code Playgroud)

小智 24

使用Spring JMS时,您已经在配置中使用了自动启动的组件/ bean,并且在您停止应用程序之前将保持活动状态(从队列/主题中订阅和读取).

要启动并保持应用程序运行,因此加载applicationcontext应该足够了.好的做法虽然也是调用registerShutdownHook,所以在应用程序暂停(即通过控制台中的ctrl + c),你的bean正常关闭和处理:)

public static void main(String args[]) {
    AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
    context.registerShutdownHook();
}
Run Code Online (Sandbox Code Playgroud)

  • 对于正在寻找类配置方法(vs XML)的人,可以使用[AnnotationConfigApplicationContext](http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/context/annotation /AnnotationConfigApplicationContext.html).我在这里有一个例子http://stackoverflow.com/a/15914136/311525. (3认同)

Dro*_*roo -4

尝试循环读取。如果找到消息,则对其进行处理,然后休眠并再次迭代。还要在其中放置某种终止符逻辑(中断线程)。您可以在 X 次尝试后终止、从文件中读取、终止 JVM、从队列中读取终止符消息等。

public static void main(String[] args) {
    while(true) {
        // look for some terminator
        // attempt to read off queue
        // process message
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (Exception e) {
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)