2014-09-23 72 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

相關問題