2014-09-23 73 views
2

我正在做一个研究项目,以确定我们可以在多大程度上使用Spring引导来配置嵌入式Tomcat。我被要求研究的项目之一是关于我们是否仍然可以使用应用程序管理器。我没有具体的用例说明为什么我们想要使用带有嵌入式tomcat的应用程序管理器,所以也许这使得这个问题无法回答:我可以为Spring Boot的嵌入式tomcat启用tomcat管理器应用吗?

Spring Boot使用的嵌入式tomcat 7是否包含tomcat管理器应用程序,如果没有,它需要添加/启用它?

+0

你的经理应用程序的用例是什么?如果不知道这一点,很难说它是否合理。 – 2014-09-23 14:25:09

+0

@AndyWilkinson,不幸的是我没有一个。我编辑了我的问题来解释。 – gyoder 2014-09-23 15:33:01

+0

@AndyWilkinson,tomcat管理员曾经对我非常有用,知道哪个用户已经登录,他的闲置时间。 AFAIK Spring Boot仅为活动会话计数和最大会话计数提供端点。 – 2016-12-28 13:38:05

回答

5

是否由Spring启动时使用的嵌入式的Tomcat 7包含一个Tomcat管理器应用程序

不,我不确定尝试添加它是否合理。

管理器应用程序的主要功能是允许您启动和停止单个应用程序,而无需停止容器并部署和取消部署各个应用程序。当您将Spring Boot与嵌入式Tomcat结合使用时,您应该将您的应用程序和容器视为单个实体,以便启动或停止应用程序以及启动和停止容器是同一件事。

管理员应用程序的一个辅助功能是提供对OS和JVM属性的访问,这是Spring Boot的执行程序已为您执行的操作。

添加/启用它需要什么?

如果您选择不听从上面,很容易添加管理员应用程序(虽然我不能保证它如预期所有的工作 - 我将它作为一个练习(鲁莽)读卡器):

@Bean 
public EmbeddedServletContainerFactory servletContainer() { 
    return new TomcatEmbeddedServletContainerFactory() { 
     @Override 
     protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
       Tomcat tomcat) { 
      tomcat.addUser("admin", "secret"); 
      tomcat.addRole("admin", "manager-gui"); 

      try { 
       tomcat.addWebapp("/manager", "/path/to/manager/app"); 
      } 
      catch (ServletException ex) { 
       throw new IllegalStateException("Failed to add manager app", ex); 
      } 
      return super.getTomcatEmbeddedServletContainer(tomcat); 
     } 
    }; 
} 

由于管理器应用程序使用JSP,您还需要依赖Jasper。假设你正在使用Maven:

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-jasper</artifactId> 
</dependency> 
+0

谢谢,解决了这个问题,但它引发了一个问题......我认为没有办法,然后避免20+奇怪的第二次等待,每次我用springboot“重新运行”应用程序? – wired00 2015-06-14 00:50:38

0

有一种方法如何convert Spring Boot's JAR to WAR。之后,您可以使用托管的tomcat管理器。

你需要说的Maven /摇篮到cuild WAR,而不是JAR创建此基本SERVET配置

import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.context.web.SpringBootServletInitializer; 

public class HelloWebXml extends SpringBootServletInitializer { 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 
} 
+1

我想知道是否可以在jar中嵌入tomcat来做到这一点。 – gyoder 2014-09-23 15:35:07

相关问题