SpringBoot之采用外置容器配置

背景: SpringBoot默认打包方式为jar,且使用内置tomcat或者jetty容器。因为内嵌的tomcat原因导致运维或者开发会难/不灵活对内嵌tomcat调优、配置参数,所有目前还是有些公司会选择将SpringBoot的打包形式配置为war,采用外部tomcat。

jar-----> war配置 如下:

第一步:

  war

第二步:

 
            org.springframework.boot
            spring-boot-starter-web
            
                
                    
                    org.springframework.boot
                    spring-boot-starter-tomcat
                
            
        

第三步:

为了本地调试配上tomcat provided,maven打包将不会将此tomcat打包进去

 

dependency>
            org.springframework.boot
            spring-boot-starter-tomcat
            provided
        

第四步:

  因为外部tomcat 访问是以项目名访问的,所以下面配置会失效

server:
  port: 9000
  servlet:
    context-path: /xxx-xxx

所以需要在pom中配置context-path的等同效果的finalName

SpringBoot之采用外置容器配置_第1张图片

第五步 :

    重新让启动类继承SpringBootServletInitializer,并重写configure方法

  说明:  外部容器部署,不能依赖于Application的main函数,而是要以类似于web.xml文件配置的方式来启动Spring应            用            上下文


@SpringBootApplication
public class App extends SpringBootServletInitializer {
  protected static final Logger logger = LoggerFactory.getLogger(App.class);

  public static void main(String[] args) {
    ApplicationContext ctx = SpringApplication.run(AdminServerApplication.class, args);
    String[] activeProfiles = ctx.getEnvironment().getActiveProfiles();
    if (activeProfiles != null && activeProfiles.length > 0) {
      for (String profile : activeProfiles) {
        logger.info("服务启动 使用的配置 profile 为:{}",profile);
      }
    }
  }
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(this.getClass());

  }
}

 

     

 

 

你可能感兴趣的:(java,tomcat,springboot)