说明

在springboot项目中使用的是springboot内嵌的tomcat容器,而war包是运行在外部的服务器容器中的

打Jar包

  • 切换到你的项目目录文件夹下,执行 mvn install 命令开始打包
  • 打包成功后,在项目目录下的 target 文件夹中会获得一个 springboot-0.0.1-SNAPSHOT.jar 的 jar 包
  • 执行命令 java -jar springboot-0.0.1-SNAPSHOT.jar 运行打包好的 jar 包

打War包

修改打包形式

修改pom.xml文件,添加以下内容,如果已经存在的,将其修改为war包形式。

1
<packaging>war</packaging>

移除嵌入式tomcat插件

  1. pom.xml里找到spring-boot-starter-web依赖节点,在其中添加如下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除嵌入式tomcat插件 -->
    <exclusions>
    <exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
  2. 添加servlet-api的依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!--添加tomcat依赖-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
    </dependency>

    <!-- 过时
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>9.0.2</version>
    <scope>provided</scope>
    </dependency>-->
  • build脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <build>
    <!-- 应与application.properties(或application.yml)中context-path保持一致 -->
    <finalName>war包名称</finalName>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>

修改启动类

  • 平常的项目启动类如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

    @SpringBootApplication
    @MapperScan({"pers.fulsun.demo.dao"})
    public class DemoApplication {
    public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
    }
    }
  • 重写 Application启动类的初始化方法, 由于需要类似于web.xml的配置方式来启动spring上下文了,故需在启动类的同级添加一个SpringBootStartApplication类,其代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

    /**
    * 启动类,该类继承SpringBootServletInitializer,并且重写configure方法
    */
    public class SpringBootStartApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

    // 这里sources的类就是启动类
    return builder.sources(DemoApplication.class);
    }
    }
  • 合并的写法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

    @SpringBootApplication
    @MapperScan({"pers.fulsun.demo.dao"})
    public class DemoApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    // 这里sources的类就是启动类
    return builder.sources(DemoApplication.class);
    }
    }

打包

在命令窗口通过以下命令mvn clean package进行打包,在target目录下就可以找到相应的war包。

部署

  • 将target下的war包拷贝到tomcat的webapps目录下。

  • 使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置将失效,请使用tomcat的端口和webapps下项目名进行访问

    • server.port
    • server.servlet.context-path