文章目录
- 7. 项目构建与部署
- 7.1 Jar部署
- 7.2 War部署
7. 项目构建与部署
SpringBoot可以内嵌Servlet容器,因此部署极为方便,可直接打包成可执行Jar包部署在Java允许环境的服务器上,也可以打包成War包并部署在外部Tomcat服务器上等。
7.1 Jar部署
SpringBoot打包成Jar包一般使用spring-boot-maven-plugin这个插件,该插件在创建Spring Boot Web项目时自动会在pom.xml文件中生成:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
当配置了该插件后就可以创建一个可执行的Jar文件。这在很大程度上简化了应用的部署,只需安装了JRE就可以允许。不过前提是应用程序的parent为spring-boot-starter-parent。
配置完成后Maven Project中双击执行clean,当clean执行完毕后,再执行install,如下所示:
执行完毕后,会发现在项目的根目录的target目录下有刚刚打包好的jar包。接着进入target目录下执行如下命令即可启动项目:
java -jar spring_security-0.0.1-SNAPSHOT.jar
或者把这个jar放在任意盘符中,按住shift+鼠标右键进行Power Shell输入命令启动项目。
7.2 War部署
SpringBoot默认打包成Jar包,使用SpringBoot构造Web应用,默认使用内置Tomcat。但考虑到项目需要集群部署或者进行优化,就需要打包成War包部署到外部的Tomcat服务器中。
- 修改打包方式
修改pom.xml文件将默认的Jar方式改为War方式:
<packaging>war</packaging>
- 排除内置的Tomcat容器
在pom.xml文件中移除Tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
- 添加servlet-api依赖
在pom.xml文件中添加servlet-api依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
- 修改启动类
启动类继承SpringBootServletInitializer并重写configure方法:
package com.shenziyi.spring_security;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class WarInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
//注意这里要指向原先main方法执行的Application启动类
return builder.sources(SpringSecurityApplication.class);
}
}
- 打包部署
打包War包的方式和打包Jar包的方式一样都是在Maven Project中双击执行clean,当clean执行完毕后,再执行install。然后把target目录下的War包放到Tomcat的webapps目录下,启动Tomcat,即可自动解压部署。最后在浏览器中就可以访问该打包项目。
注意:使用外部Tomcat部署访问时,application。properties(或者application.yml)中的配置将失效,请使用外置Tomcat的端口和webapps目录下的项目名进行访问。