【问题标题】:SpringBoot, run a daemon as CommandLine (JAR) and inside Tomcat (WAR)?Spring Boot,以命令行(JAR)和Tomcat(WAR)的形式运行守护进程?
【发布时间】:2016-08-17 19:41:32
【问题描述】:

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

看来我可以为此使用 SpringBoot。 SpringBoot 可以创建 WAR 和 JAR 文件。

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

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

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

发送

【问题讨论】:

    标签: spring web-applications spring-boot war


    【解决方案1】:

    ApplicationRunner 是 Spring Boot 1.4 中的新功能。它类似于 Spring Boot 1.3 的CommandLineRunner。它不参与应用程序上下文的连接,因此接口不负责在 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 一起使用。然后运行器将启动侦听器线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2018-04-14
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多