博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot-Package打包
阅读量:3961 次
发布时间:2019-05-24

本文共 3844 字,大约阅读时间需要 12 分钟。

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

1、前期准备工作

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

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

id name age email
1 Jone 18 test1@baomidou.com
2 Jack 20 test2@baomidou.com
3 Tom 28 test3@baomidou.com
4 Sandy 21 test4@baomidou.com
5 Billie 24 test5@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、如果没有自行编写、默认不写
jar
# 修改最终打成jar包的包名
springboot-jar-war

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

war

2、添加/排除依赖

因为程序在启动、编译的时候还是需要servlet的依赖、等生命周期应该在打包完成之前排除掉内嵌的tomcat

所以有两种方式、任选其中一项都是可以的(不可以两个同时存在)

#####   方式1:打包完成后直接排除内嵌Tomcat依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
##### 方式2:打包的时候可以不用包进去,外部提供、但是可以让参与测试编译等生命周期
org.springframework.boot
spring-boot-starter-tomcat
provided

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有指定

5、端口修改

Tomcat默认为8080

可以在这里修改指定端口
在这里插入图片描述

6、总结

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

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

springbootApplication应用main类继承SpringBootServletInitializer类实现configure

在进行项目打包即可!

转载地址:http://bdqzi.baihongyu.com/

你可能感兴趣的文章