SpringBoot打包方式以及将war包部署到Tomcat服务器

本文详细介绍了如何将SpringBoot项目由默认的jar包转换为war包,并排除内置Tomcat,通过继承SpringBootServletInitializer配置启动流程,以及使用mvn打包和部署到外部Tomcat服务器的过程。


项目的打包类型:pom、jar、war
packing默认是jar类型,
pom ---------> 父类型都为pom类型
jar ---------> 内部调用或者是作服务使用
war ---------> 需要部署的项目

1、pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom。

    <packaging>pom</packaging>
    <modules>
        <module>guns-base</module>
        <module>guns-sys</module>
        <module>guns-vip-main</module>
		<module>guns-base-sms</module>
    </modules>

而moudle即子项目中为

 <packaging>jar</packaging>
 			或者
 <packaging>war</packaging>

聚合工程只是用来帮助其他模块构建的工具,本身并没有实质的内容。具体每个工程代码的编写还是在生成的工程中去写。
对于在父工程中导的依赖工程也可享有。

2、jar:工程的默认打包方式,打包成jar用作jar包使用。存放一些其他工程都会使用的类,工具类。我们可以在其他工程的pom文件中去引用它。

3、 war:将会打包成war,发布在服务器上,如网站或服务。用户可以通过浏览器直接访问,或者是通过发布服务被别的工程调用。

SpringBoot默认达成jar包,使用SpringBoot构建web应用,默认使用内置的Tomcat。但考虑到项目需要集群部署或者进行优化时,就需要打成war包部署到外部的Tomcat服务器中。

由于不使用Spring Boot 自带的Tomcat,所以在application中配置服务器server是无效的。
如果需要修改端口port,必须修改tomcat的端口。

tomcat修改默认端口:https://www.cnblogs.com/wzstudy/p/10690656.html

本文所使用SpringBoot版本为:2.0.3.RELEASE

一、修改pom.xml文件将默认的jar方式改为war

<groupId>com.example</groupId>
<artifactId>application</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--默认为jar方式-->
<!--<packaging>jar</packaging>-->
<!--改为war方式-->
<packaging>war</packaging>

二、排除内置的Tomcat容器(两种方式都可)

1.排除spring-boot-starter-web中的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>

2.添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
        相当于compile,但是打包阶段做了exclude操作-->
    <scope>provided</scope>
</dependency>

三、继承SpringBootServletInitializer实现configure方法

org.springframework.boot.web.servlet.support.SpringBootServletInitializer,实现configure方法:

为什么继承该类,SpringBootServletInitializer源码注释:
Note that a WebApplicationInitializer is only needed if you are building a war file and deploying it.
If you prefer to run an embedded web server then you won’t need this at all.
翻译如下:
注意,如果您正在构建WAR文件并部署它,则需要WebApplicationInitializer。
如果你喜欢运行一个嵌入式Web服务器,那么你根本不需要这个。

启动类代码:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

1.方式一,启动类继承SpringBootServletInitializer实现configure

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}

2.方式二,新增加一个类继承SpringBootServletInitializer实现configure

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //此处的Application.class为带有@SpringBootApplication注解的启动类
        return builder.sources(Application.class);
    }
}

注意事项:
使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的

server:
  port: 9002
  servlet:
    context-path: /ssot-backend

将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。
为了防止应用上下文所导致的项目访问资源加载不到的问题,
建议pom.xml文件中标签下添加标签:

<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>

项目名这里自定义为dormitory

四、使用mvn命令行打包和运行

先执行maven clean ,再执行maven package,那么就会在target目录下生成了dormitory.war
在这里插入图片描述
将dormitory.war放入tomcat中的webapps
在这里插入图片描述
在windows中运行,linux类似

cd bin
startup.bat

启动成功之后,会发现生成了一个dormitory的文件夹,项目也运行起来了。
在这里插入图片描述

原文链接
SpringBoot打成war包,部署到Tomcat服务器
SpringBoot项目部署(war包)
Maven的三种项目打包方式——pom,jar,war的区别

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值