【问题标题】:Can I enable the tomcat manager app for Spring Boot's embedded tomcat?我可以为 Spring Boot 的嵌入式 tomcat 启用 tomcat manager 应用程序吗?
【发布时间】:2014-11-17 16:35:46
【问题描述】:

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

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

【问题讨论】:

  • 经理应用程序的用例是什么?不知道这一点,很难说它是否有意义。
  • @AndyWilkinson,不幸的是我没有。我编辑了我的问题来解释。
  • @AndyWilkinson,tomcat 管理器曾经对我非常有用,可以让我知道哪个用户已登录以及他的不活动时间。 AFAIK Spring Boot 仅为活动会话计数和最大会话计数提供端点。

标签: tomcat spring-boot


【解决方案1】:

Spring Boot使用的嵌入式tomcat 7是否包含tomcat manager app

不,它没有,我不确定尝试添加它是否有意义。

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

管理器应用程序的第二个功能是提供对 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>

【讨论】:

  • 谢谢,很好地回答了这个问题,但是它引出了这个问题......我认为没有办法避免每次我用 springboot“重新运行”应用程序时等待 20 多秒?
【解决方案2】:

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

你需要告诉 Maven/Gradle 来创建 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);
    }
}

【讨论】:

  • 我想知道 jar 中嵌入的 tomcat 是否可以做到这一点。
【解决方案3】:

如果您只需要一个端点列表,您可以配置您的应用程序以生成 swagger 页面。 我使用 spring boot 和 springfox。

API 文档:
http://localhost:8080/v2/api-docs

Swagger 用户界面:
http://localhost:8080/swagger-ui.html

教程:
Springfox Reference Documentation

代码:

package some.package;

import javax.servlet.ServletContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.paths.RelativePathProvider;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Value("${swagger.host:}")
    private String swaggerHost;

    @Value("${swagger.basePath:/}")
    private String swaggerBasePath;

    @Autowired
    ServletContext servletContext;

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .host(swaggerHost)
            .pathProvider(new RelativePathProvider(servletContext) {
                @Override
                public String getApplicationBasePath() {
                    return swaggerBasePath;
                }
            })
            .select()
            .apis(RequestHandlerSelectors.basePackage("path.to.package"))
            .build();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2017-10-21
    • 2018-01-12
    • 2018-07-02
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多