Spring Boot 构建WAR包

  归功于Spring Boot的自动配置功能,我们不需要创建web.xml文件或者servlet初始化类来声明Spring MVC的DispatcherServlet。

  首先要设置编译成war包:

    <packaging>war</packaging>

  然后继承SpringBootServletInitializer,并覆盖configure(SpringApplicationBuilder builder)方法,它调用sources() 方法注册了一个Spring 配置类。

  本例只注册了一个Application类。这个类既是启动类(带有main()方法),也是一个Spring配置类。

  Application类上添加了@SpringBootApplication注解。这会隐性开启组件扫描,而组件扫描则会发现并应用其他配置类。

package com.zgz.webinitializer;

import com.zgz.Application;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

/**
 * Created by zgz on 2017/12/16.
 */
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}

  然后执行$ mvn package或者$ mvn install就可进行打包了,或者双击idea工具的Maven Projects下的命令进行打包:

              

  然后将war放在本地tomcat容器就可以启动使用了,只是因为用的是本地tomcat,关于application.properties的内置tomcat的配置就无效了,

  像:server.port跟server.context-path等

  还有就是要注意,像我在idea进行编译,用内置tomcat启动工程的时候,使用到了如下两个依赖:

  <dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  </dependency>
  <dependency>
   <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  </dependency>
  
  但在构建war包的时候,可以将这两个架包去除,不然引入tomcat-embed-jasper架包会导致在本地tomcat启动报错,而javax.servlet-api在容器tomcat本身已经拥有了,无需在编译进工程。
  每个容器使用Spring Boot编译的war包,可能或多或少存在一些问题,架包冲突,缺少架包,具体问题具体分析,我相信Spring Boot会越来越完美。

  以上纯属个人理解,如有错误,请帮我纠正,谢谢。
  

 

posted on 2017-12-17 13:09  zgz2016  阅读(382)  评论(0编辑  收藏  举报

导航