我有一个Spring JMS应用程序。事实上,没有用户界面。 Just Spring配置(JMS侦听器)和Spring配置由web.xml加载。 因此,当我在服务器中部署时,监听器开始工作。
但是我不想要Web部分,因为没有UI,它只是一个监听队列并进行处理的项目。所以我认为它应该是JAR并且它应该独立运行(或者当我在服务器中部署时)如何在服务器中部署时创建这样的项目/ JAR它会自动开始运行。我不希望每次更新JAR时都运行一个主类。
答案 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应用程序/服务器的控制台控制。在你的情况下,这听起来不是一个选择。