小编典典

我可以为Spring Boot的嵌入式tomcat启用tomcat管理器应用程序吗?

spring-boot

我正在做一个研究项目,以确定可以在多大程度上使用Spring
Boot配置嵌入式Tomcat。我被要求调查的项目之一是关于我们是否仍然可以使用应用程序管理器。对于我们为什么要使用具有嵌入式tomcat的应用管理器,我没有特定的用例,因此也许这使这个问题无法回答:

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


阅读 268

收藏
2020-05-30

共1个答案

小编典典

Spring Boot使用的嵌入式tomcat 7是否包含tomcat管理器应用

不,不是,我不确定要添加它是否有意义。

Manager应用程序的主要功能是允许您在不停止容器的情况下启动和停止单个应用程序,以及部署和取消部署单个应用程序。当您将Spring
Boot与嵌入式Tomcat一起使用时,应将应用程序和容器视为单个实体,因此启动或停止应用程序以及启动和停止容器是一回事。

Manager应用程序的第二个功能是提供对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);
        }
    };
}

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

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
2020-05-30