Spring JMS作为JAR项目运行

时间:2012-09-18 12:41:42

标签: spring jar project

我有一个Spring JMS应用程序。事实上,没有用户界面。 Just Spring配置(JMS侦听器)和Spring配置由web.xml加载。 因此,当我在服务器中部署时,监听器开始工作。

但是我不想要Web部分,因为没有UI,它只是一个监听队列并进行处理的项目。所以我认为它应该是JAR并且它应该独立运行(或者当我在服务器中部署时)如何在服务器中部署时创建这样的项目/ JAR它会自动开始运行。我不希望每次更新JAR时都运行一个主类。

2 个答案:

答案 0 :(得分:1)

之前我使用过可执行jar来启动JMS队列。您只需要确保您可以访问Spring和JMS的所有jar依赖项,这很多。这可以通过将类路径设置为指向依赖关系jar或创建Uberjar并将所有依赖关系jar包装在可执行jar中来完成。

这是一个示例类,当您将其设置为jar清单中的主类时,它将从Jar启动ActiveMQ。将使用进程的进程ID创建 jms.pid 。您必须在ConfigurableApplicationContext中为JMS的Spring上下文设置路径。

public class Server {

    public static void main(String[] args) throws Exception {

        // Define Spring contexts required for JMS to run
        List<String> contexts = Arrays.asList( "classpath:applicationContext.xml", "classpath:spring/jmsContext.xml" );
        ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext(contexts);

        // Get activeMQ from JMS context
        BrokerService broker = applicationContext.getBean( "broker" );

        // Start up activeMQ
        broker.start();

        // Get pid for this process
        String sysId = ManagementFactory.getRuntimeMXBean().getName();
        String pid = sysId.substring(0, sysId.indexOf("@"));

        // Write PID file
        File file = new File("jms.pid");
        DataOutputStream outs = new DataOutputStream(new FileOutputStream(file, false));
        outs.write(pid.getBytes());
        outs.close();

    }

}

用于访问BrokerService

的Spring配置示例
<bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
    <property name="config" value="classpath:org/activemq/xbean/activemq.xml" />
    <property name="start" value="true" />
</bean>

答案 1 :(得分:0)

我经常看到JMS应用程序作为Windows服务或Unix守护进程运行。这些为您提供了可以配置的功能,如服务器重新启动时重新启动JMS应用程序等。

有一些商业Java EE容器(如Weblogic)提供了start-up类,可以在集群中的节点启动时用于启动JMS应用程序。这提供了对JMS应用程序/服务器的控制台控制。在你的情况下,这听起来不是一个选择。