首页   >   代码编程

springboot打war包,部署到外部tomcat

springboot默认使用内嵌tomcat,默认也是打jar包,如何将springboot打war包,并部署到外部tomcat呢?

一、修改<packaging>标签的值为war

<groupId>com.wolffy</groupId>
<artifactId>reader</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--默认打jar包-->
<!--<packaging>jar</packaging>-->
<!--指定打war包-->
<packaging>war</packaging>

二、pom.xml中排除内嵌tomcat的依赖(有两种方式,二选一即可)

1、舍弃springboot-starter-web,直接添加外部tomcat依赖

<!-- 添加外部tomcat,用来打war包  -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!-- 打包时不带上,只用于本地编译、测试、运行 -->
    <scope>provided</scope>
</dependency>

2、继续使用springboot-starter-web,排除它的内嵌tomcat依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 排除内嵌tomcat依赖 -->
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 添加servlet-api的依赖,用来打war包  -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>

这里需要稍微注意一下,在将内嵌tomcat排除之后,一些关于servlet的引用都会丢失,所以必须单独为servlet引入相关的依赖

springboot打war包,部署到外部tomcat

三、继承SpringBootServletInitializer,重写configure方法

package com.wolffy.reader;

import com.wolffy.reader.util.DefaultProfileUtil;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

/**
 * This is a helper Java class that provides an alternative to creating a web.xml.
 * This will be invoked only when the application is deployed to a servlet container like Tomcat, JBoss etc.
 * <p>
 * 两种方式:
 * 1、可以直接写在Application.java中
 * 2、可以再新写一个类,可与Application.java共存
 * <p>
 * Created by Felix on 2018/12/7.
 */
public class ApplicationWebXml extends SpringBootServletInitializer {

    /**
     * set a default to use when no profile is configured.
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 可要可不要
        DefaultProfileUtil.addDefaultProfile(builder.application());
        // 指定运行的主类,官方标准写法
        return builder.sources(Application.class);
    }

}

这一步必须要写,否则运行时会出现404。

上述三个步骤,正确配置完毕之后,将打出来的war包放到tomcat中运行,就可以看到启动类已经变成我们重写了configure的那个ApplicationWebXml.java了(如果是直接在Application.java中写的,那入口类就依旧还是Application.java)

springboot打war包,部署到外部tomcat

QQ群: 686430774  /  718410762

站长Q: 1347384268

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2019-05-06

永久地址:https://www.jiweichengzhu.com/article/99a9f76a28b14c1dbeb726c652c2ca88

评论