SpringBoot-Package打包

SpringBoot项目在日常开发中是现在开发形式中的基础模式了、在构建、编码、测试、运行、打包、部署等一系列过程中、打包的方式就是其中一个非常重要的环节、SpringBoot默认的打包方式是jar但是在日常部署的方式中、我们需要根据不同的部署情况进行讲项目打成不成的包进行服务器部署、话又说来说、SpringBoot内嵌了tomcat但是打包方式确实jar、所以在这里需要进行整理一下如何讲一个SpringBoot项目打包成jar或者war进行项目发布部署。

1、前期准备工作

  • 拥有 Java 开发环境以及相应 IDE
  • 熟悉 Spring Boot
  • 熟悉 Maven
  • 掌握基本的打包部署能力

现有一张 User 表,其表结构如下:

idnameageemail
1Jone18test1@baomidou.com
2Jack20test2@baomidou.com
3Tom28test3@baomidou.com
4Sandy21test4@baomidou.com
5Billie24test5@baomidou.com

其对应的数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

最终我们将初始化Springboot项目进行整合MybaitsPlus进行数据页面访问展示即可来演示打包。

访问方式:localhost:8080/list/all
在这里插入图片描述

2、jar

SpringBoot项目默认的打包方式就 jar包、所以我们无需作出更多的配置就可以很轻松的进行项目打包部署。

1、pom修改

# 默认为jar、如果没有自行编写、默认不写
<packaging>jar</packaging>


# 修改最终打成jar包的包名
<build>
    <!--指定打包名称-->
        <finalName>springboot-jar-war</finalName>
</build>

2、新建maven打包
在这里插入图片描述
3、编写maven打包执行脚本(排除测试、关联项目)
在这里插入图片描述
3、执行打包
在这里插入图片描述
最终打成jar包的存放地:在target目录下

java -jar springboot-jar-war.jar即可执行(springboot内嵌了tomcat)

3、war

springboot打成war运行在外部的tomcat或者服务中使用应该从以下思路开始

1、springboot内嵌了tomcat、需要排除内部容器

2、启动类中springboot启动通过main方法进入项目外部容器部署需要告知项目的入口类加载

1、pom修改

springboot默认打包方式修改为war

<!--打包方式-->
<packaging>war</packaging>

2、添加/排除依赖

因为程序在启动、编译的时候还是需要servlet的依赖、等生命周期应该在打包完成之前排除掉内嵌的tomcat
所以有两种方式、任选其中一项都是可以的(不可以两个同时存在)

#####   方式1:打包完成后直接排除内嵌Tomcat依赖
<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:打包的时候可以不用包进去,外部提供、但是可以让参与测试编译等生命周期
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
        相当于compile,但是打包阶段做了exclude操作-->
    <scope>provided</scope>
</dependency>

3、修改启动项

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

SpringBootServletInitializer源码解读
在这里插入图片描述
从上述源码注释中可以看出
在这里插入图片描述

方式1:

springboot启动类中去继承SpringBootServletInitializer并且重写configure方法来指定项目的入口
在这里插入图片描述

@SpringBootApplication
@MapperScan("com.zkr.springbootjarwar.mapper")
public class SpringbootJarWarApplication extends SpringBootServletInitializer {

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

    /**
     * 继承SpringbootJarWarApplication 重写 configure
     * 实现war外部程序主入口的指定
     * @param builder
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootJarWarApplication.class);
    }
}

方式2:

新增加一个类继承SpringBootServletInitializer实现configure

/**
 * @author LiuGang
 * @date 2021/2/23 - 17:23
 * @Motto "何必余生、及时行乐、Good luck mi"
 */
public class Springbootjarwar extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //此处的Application.class为带有@SpringBootApplication注解的启动类
        return builder.sources(SpringbootJarWarApplication.class);
    }
}
  • 更加推荐使用第一种!不要问经验所得

maven执行打包脚本生成war
在这里插入图片描述
4、部署外部容器

以Tomcat为例:
将war放入Tomcat的WebApps目录下
然后启动tomcat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

访问成功:但是访问的时候需要添加包名才可以

注意事项:

使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的
server.port=
server.servlet.context-path=
将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。
为了防止应用上下文所导致的项目访问资源加载不到的问题,
建议pom.xml文件中标签下添加最终的包名指定标签:

4、解决访问路径

我们将项目打成war包之后、可能在有些时候需要添加项目名称来访问、但有时候不需要、就想springboot中application.yml中可以通过server.servlet.context-path=来指定、那么外部的时候Tomcat也可以指定。并且修改端口
在这里插入图片描述

# path : / 表示不需要项目名
# docBase:项目路径 这里写相对路径、相对webapps、不要问我怎么知道的  appBase有指定
<Context path="/" docBase="项目地址路径" debug="0" />

5、端口修改

Tomcat默认为8080
可以在这里修改指定端口
在这里插入图片描述

6、总结

jar不需要修改任何配置、使用maven进行脚本打包即可

war:需要排除内部tomcat、或者添加编译测试运行等周期的servlet支持、在最终同样也排除了容器

springbootApplication应用main类继承SpringBootServletInitializer类实现configure
在进行项目打包即可!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值