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

时间:2014-09-23 12:53:42

标签: tomcat spring-boot

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

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

3 个答案:

答案 0 :(得分:7)

  

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

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

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

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

答案 1 :(得分:0)

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

你需要对Maven / Gradle说Cuild而不是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);
    }
}

答案 2 :(得分:0)

如果仅需要端点列表,则可以将应用程序配置为生成摇摇欲坠的页面。 我使用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();
    }
}