SpringBoot,运行守护进程作为CommandLine(JAR)和内部Tomcat(WAR)?

时间:2016-08-17 19:41:33

标签: spring web-applications spring-boot war

我想创建一个Java deamon进程(MQ处理器),它既可以从命令行运行(java -jar ...),也可以作为Tomcat内的JEE容器中的WAR运行。它应该在WebApp启动后自动启动。这个应用程序不会有WebGUI。

似乎我可以使用 SpringBoot 。 SpringBoot可以创建WAR和JAR文件。

我的问题是:我应该将SpringBoot ApplicationRunner用于便携式守护程序吗?

使用SpringBoot创建可移植(CLI / WebApp)守护进程的最佳实践/方法是什么?

这是如何在幕后工作的?如果我使用ApplicationRunner并创建一个WAR,SpringBoot是否会创建一个 Servlet

的Tx

1 个答案:

答案 0 :(得分:0)

ApplicationRunner是Spring Boot 1.4中的新功能。它类似于Spring Boot 1.3的CommandLineRunner。它不涉及Application上下文的连接,因为接口不负责在WAR部署中创建任何Servlet。以下是将您的应用部署为WAR的详细信息:

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

SpringBootServletInitializer将创建servlet。

现在我不确定你是如何设置MQ处理器的,但是如果它连接成一个bean并且有一些侦听线程用于队列中的消息,那么你真的不需要ApplicationRunner。您只需要将处理器连接为bean并在其上添加@PostConstruct注释,以便您可以启动侦听器线程。如果您无法控制bean上的注释,那么您可以使用ApplicationRunner并将Autowired与处理器bean一起使用。然后跑步者将启动监听器线程。