百度
360搜索
搜狗搜索

springboot项目打包,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?详细介绍

本文目录一览: IDEA SpringBoot 项目打包成jar包

由于SpringBoot内置了tomcat,所以将SpringBoot项目直接打成jar包,可以直接在cmd里面运行。

一、打包

选中项目后,打开Maven Projects视图,如下图:

然后运行package,将项目重新打包。

当日志出现:

说明打包成功。

二、导出打成功的jar包。

在target目录下:

如该图的demo-0.0.1-SNAPSHOT.jar包即为打包成功后的包,一般在SpringBoot项目的target目录下。

三、在安有java环境的电脑上直接运行

在文件管理器里面先进入SpringBoot项目的target文件夹下,然后在上边的目录下输入cmd回车,即可进入对应目录下。然后在cmd里输入java? -jar? ?,然后把编译好的jar直接拖入cmd,然后回车即可运行。

SpringBoot+Docker项目打包(jar)和部署

一、打包SpringBoot项目
1.检查pom文件是否有maven打包插件

2.选择IDEA右侧Maven,点击install(如果配置了maven的环境变量,则可以在控制台输入:mvn install 命令,同样可以打包jar包)

等待maven打包,当控制台出现下列日志时表示打包成功

如下图所示,打包完会出现一个.jar文件,即打包好的jar包。

3.在控制台输入:java -jar /Users/heyou/Desktop/springboot-0.0.1-SNAPSHOT.jar 来检查jar包是否可以正常运行。

二、Docker部署jar包
前提条件:

1.构建Dockerfile
在已经打包好的jar包的同级目录下新建Dockerfile
Mac 可在IDEA控制台输入vim Dockerfile 进入vim编辑,输入:

其中:
FROM 命令指定运行环境和版本
VOLUME:一个特别指定的目录,用于存储数据,该命令的作用是在/var/lib/docker创建一个名为tmp的目录,在开启redis服务时,需要特别指定redis的数据存储在哪个文件夹,此时这个命令就十分有用

ADD:拷贝文件并且重命名(需要输入两个参数:即jar包名称和重命名后的名称)

ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
2.创建docker文件夹,将jar包与Dockerfile移动到该文件夹,进入该文件夹,运行命令:

此时会将该项目构建成一个image(镜像),运行命令:

3.运行镜像:

注:“:”左边的端口号是暴露给外部访问的端口,而右边端口是docker内部镜像运行的端口

4.打开浏览器访问部署的项目地址,检查项目是否运行正常

springboot打包发布原理

SpringBoot 提供了 Maven 插件 spring-boot-maven-plugin,将 Spring Boot 项目打成 jar 包或者 war 包。
只需要在pom.xml文件中加入下面这个插件配置,再通过mvn clean package获取jar包即可。

打包后 通过下面的命令即可启动一个服务。

可以看到,主要有三个大目录META-INF,BOOT-INF以及org,

比较重要的是MAINIFEST.MF文件:

该文件声明了Main-Class 配置项:可以理解为jar包的启动类,这里设置为 spring-boot-loader 项目的 JarLauncher类,进行 Spring Boot 应用的启动。
还有一个Start-Class 配置项:配置的内容是我们springboot项目的主启动类。

classes文件中保存了 Java 类所编译的 .class文件以及配置文件等。
lib目录中保存了我们项目所依赖的jar包。

该文件中即springboot为我们提供的jar包启动类,亦即JarLauncher.class

当使用 java -jar filename.jar 命令启动时,会执行封装在 JAR 文件中的程序。JAR 文件需包含 manifest,其中一行格式为 Main-Class:classname,指定了一个包含 public static void main(String[] args) 方法的类,作为该程序的启动点。

对应在示例的这个项目,问题可以翻译为为什么不可以直接使用com.jsvc.jarlearn.JarlearnApplication类作为启动类?

主要是因为,Java 没有提供任何加载嵌套 jar 文件的标准方法(即加载本身包含在 jar 中的 jar 文件)。当需要分发一个可以从命令行运行而不需要解压缩的自包含应用程序时 , 会出现问题。

同时,我试了下,直接运行application类的话,是找不到主类的:

因为在文件目录中,JarlearnApplication实际上是在META-INF/maven/... 中的,所以会找不到。

所以,springboot以 org.springframework.boot.loader.JarLauncher 为启动类,
又自定义了 LaunchedURLClassLoader 用来加载BOOT-INF中的class文件以及BOOT-INF/lib中的嵌套jar包。

我这边通过引入 spring-boot-loader 模块来看下JarLaunch的源码:

可以看到main方法中,执行了launch方法,改方法由JarLaunch的父类Launcher提供:

launch方法主要分为三步:

基本思路就是将 org.springframework.boot.loader 包路径添加到 java.protocol.handler.pkgs 环境变量中,从而使用自定义的 URLStreamHandler 实现类 Handler处理 jar: 协议的 URL。
关于handler 可以自行百度下。

这里有两个主要方法:

也就是 getClassPathArchivesIterator 以及 createClassLoader
首先是 getClassPathArchivesIterator :

首先是isSearchCandidate,在JarLaunch中实现:

可以看出是只处理BOOT-INF/文件夹下的内容。
然后会通过 getNestedArchives 获取到嵌套的Archive,其中的 isNestedArchive 方法也由JarLaunch实现:

基本就是获取 BOOT-INF/classes/ 下的目录以及 BOOT-INF/lib/ 下的jar文件,最终通过 getNestedArchives 将其封装为对应的Archive并返回。

然后就是 createClassLoader 方法:

基本上就是通过archives获取到所有的URL,然后创建处理这些URL的ClassLoader。

主要就是通过 getMainClass 方法获取到manifest文件中配置的 Start-Class :

然后通过另一个launch方法,开始执行:

这里createMainMethodRunner创建出来的是什么呢?

最终调用的其实就是MainMethodRunner的run方法了,其实也就是通过反射调用Application的main方法了。

springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

在IT软件界,Java一直占据着大半壁江山,Java的生态圈环境很好,有着很多优秀的框架,而 Spring Boot 作为Spring框架中的代表,这几年也越来越火。

Spring Boot是用来简化Spring应用的配置和开发过程的,此框架采用了“约定优于配置”的理念, 免去了繁琐的XML配置 ,使我们开发项目更简单。而且Spring Boot提供了两种项目打包方式:生成war文件、生成可执行的jar文件,很多Java开发者不清楚这两种项目打包方式的区别,生产环境该选哪种方式呢?

1、war包方式部署

war包其实是打包后的Java Web工程, 本质上是个压缩包 ,里面包含了很多目录及文件,我们把war包放入Tomcat这类容器中启动后,war包就会自动解压出一个同名的文件夹来。

注意:Spring Boot项目如果要打包成war包来部署,是需要修改项目入口文件代码的。另外由于Spring Boot内置了Tomcat容器,所以打包成war包时要将内置的Tomcat依懒排除掉。

2、可执行jar文件方式部署

Spring Boot框架默认的打包部署方式是生成一个可执行的jar文件,无论项目多么复杂,依懒包有多少,最终只有一个jar文件(有些可能有外置的配置文件),在任何一台装有JRE/JDK环境的服务器上可以直接以 java -jar xx.jar 这种方式来运行(其实是靠内置的Tomcat来运行的),十分方便。

可执行jar文件方式部署是我们推荐的 ,特别是在微服务场景下部署更便捷。

无论是war方式还是jar方式,本质上差别并不大。在生产环境下还是要选择合适的方式。

综上,如果服务器配置高、节点多、微服务方式,建议选择jar方式部署;如果服务器配置跟不上,建议选择war方式部署(省内存空间)。

springboot用哪个环境的配置是在打包时确定的吗

是。springboot打包时需要根据不同环境获取不同的配置文件。使用springboot开发项目过程中,会有多种环境切换,例如开发环境,测试环境,演示环境,生产环境等。

springboot打包后无法loaddll文件

springboot打包后无法loaddll文件有以下原因。1、springboot打包后加载不出来,无法loaddll文件,使其无法使用。2、文件下载后安装,需要更改前段代码,更改后可以loaddll文件。3、配置环境质量不同,无法loaddll文件,调节合适安装配置。

SpringBoot项目打包-Assembly

项目部署并不是一个单一的jar包就完事,实际上除了jar包还有很多其他文件,比如sql脚本、安装脚本等其他文件,本文要说的就是如何将这些文件统一打包成一个压缩包文件,直接上传linux服务器安装。
一个项目从立项到最终的发布上线往往有在不同的环境运行,比如开发时的开发环境、测试时的测试环境、线上环境等等,频繁的变动势必会出错,较好的解决方式便是配置多个环境,使用哪个环境便开启哪个环境,避免重复的改动配置。
可以通过两种方式配置:
application.yml配置
mvn中profiles配置
节点说明:
有这样一个场景,如何把配置文件、第三方等依赖包(不想放到工程jar)、安装文件等文件压缩成一个zip包,方便上传到Linux?
此时便可通过maven-jar-plugin和maven-assembly-plugin来完成场景中的功能
maven-jar-plugin是一个maven打包(jar)插件,它的主要作用是设定MAINFEST.MF文件中的参数,比如指定运行的Main class、将依赖的jar包加入classpath中等。
注意:
配置详情
最小化配置
注意:在这里我们使用最小化配置即可
值得注意的地方如下几点:
重点节点介绍:

Springboot项目打包引入lib目录下jar包

1、首先项目引入jar包

2、pom文件中引入jar

3、plugin配置
加上配置,将本地依赖包打进jar里

可以通过jd-gui工具查看jar源码

SpringBoot项目使用war包部署至云服务器(Linux+Tomcat)

一、项目打包:

1.更改项目的启动方式

使用web.xml运行应用程序,指向Application,最后启动springboot(继承SpringBootServletInitialier,重写函数)

public class WarStartApplication extends SpringBootServletInitializer {

?? @Override

? ? ? ? ?? protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

阅读更多 >>>  厂家打包发货素材哪里找

? ? ? ? ? ? ? ? ? return builder.sources(Application.class);

? ? ? ? ?? }

? ? }

2.更改.properties配置信息

修改相关的地址和配置信息

PS: 可采用STS自带的动态配置系统(多配置文件)进行开发环境和生产环境的隔离。

3.更改api接口层配置文件(pom.xml)

1)进行war包配置

war

2)war包打包所需依赖项

? ? ?

javax.servlet

? ? ?

javax.servlet-api

? ? ?

provided

4.执行打包操作

1)maven clean清除之前的打包

2)maven install进行打包操作

二、将war包文件上传至服务器

1.在api层的target文件夹下找到新生成的项目war包

2.使用rzsz工具上传war包(rz)

三、使用Tomcat进行项目开放

1.进行 Tomcat的环境部署

2.将war包拷贝到tomcat的webapps文件夹下

3.cd至bin文件夹下(tomcat会自动解压项目war包并进行项目部署)

使用startup.sh进行tomcat启动

使用shutdown.sh进行tomcat关闭

springboot自定义日志过滤器打包后无法初始化

1、配置文件丢失或错误:自定义日志过滤器需要一些配置文件来完成初始化,例如logback-spring.xml、log4j-spring.properties等。请检查这些配置文件是否存在,并且它们的命名和路径是否正确。2、依赖问题:请检查项目的依赖是否正确,例如日志框架的依赖、自定义日志过滤器的依赖等。确保所有需要的依赖都已经添加到项目的构建工具中(如Maven或Gradle)。3、过滤器类加载问题:请检查自定义日志过滤器类是否被正确加载。可以使用日志框架提供的日志输出功能来打印日志。

网站数据信息

"springboot项目打包,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:springboot项目打包,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!