首页 > 技术文章 > Springboot -war部署

KdeS 原文

一、修改pom.xml文件

    1.1  修改打包形式

<!--改为war方式 -->
<packaging>war</packaging>

    1.2 移除嵌入式tomcat插件

<!-- 在项目打包时,剔除springboot内置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>

1.3 添加servlet-api的依赖

           作用:编写servlet时用我们自己引用的包,而运行时用tomcat自己的包,这样就不用冲突了,又能正常开发代码

下面两种方式都可以,任选其一

第一种:
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>


第二种:
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.0.36</version>
    <scope>provided</scope>
</dependency>

1.4 maven打包配置

<build>
        <!-- 自定义打包名称
             这里的名称必须与application.properties中server.context-path的值一致
           否则即使Tomcat启动项目成功,在访问时也会导致404错误 -->
        <finalName>demo</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${jdk.version}</source><!-- 指定jdk版本 -->
                    <target>${jdk.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding><!-- 指定编码版本 -->
                </configuration>
            </plugin>
            <!--该插件的主要功能是进行项目的打包发布处理 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.4.RELEASE</version>
                <configuration> <!--设置程序执行的主类,指定程序入口 -->
                    <mainClass>com.web.boot.ApplicationStart</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!-- repackage将jar / war 重新打包为可执行文件 -->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

1.5 修改启动类,并重写初始化方法

1.5.1 我们平常用main方法启动的方式,都有一个App的启动类,代码如下:
@SpringBootApplication
public class ApplicationStart{
    public static void main(String[] args) {
        SpringApplication.run(ApplicationStart.class, args);
    }
}
1.5.2 使用外置的tomcat启动,我们需要类似于web.xml的配置方式来启动spring上下文了,在Application类的同级添加一个SpringBootStartApplication类,其代码如下:
/** 
 * 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法 
 */ 
@SpringBootApplication
public class ApplicationStart  extends SpringBootServletInitializer{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类 
        return builder.sources(ApplicationStart.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(ApplicationStart.class, args);
    }
}

SpringBootServletInitializer的执行过程,简单来说就是通过SpringApplicationBuilder构建并封装SpringApplication对象,并最终调用SpringApplication的run方法的过程。

spring boot就是为了简化开发的,也就是用注解的方式取代了传统的xml配置。

SpringBootServletInitializer就是原有的web.xml文件的替代。

二.打包部署

2.1在项目根目录下(即包含pom.xml的目录),在命令行里输入: 

clean package -D maven.test.skip=true

 等待打包完成,出现[INFO] BUILD SUCCESS即为打包成功。 

 2.2  然后把target目录下的war包放到tomcat的webapps目录下,启动tomcat

 即可自动解压部署。

 三.运行

3.1 ${Tomcat_home}/bin/目录下执行startup.bat(windows)

3.2 ${Tomcat_home}/bin/目录下执行startup.sh(linux)

 四.访问测试

注意事项:

使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的端口

将失效,请使用${Tomcat_home}/conf/server.xml中的端口进行访问。

 

为了防止应用上下文所导致的项目访问资源加载不到的问题,

建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签,且需和application.properties(或者application.yml)中server.context-path的值一致

推荐阅读