Spring Boot 部署浅析(jar or war)
对于传统的 ssm 或者 ssh 项目的部署,一般会打包成war包,或者是一个编译好的文件夹,再放到 tomcat 的 webapps 目录下,如果是 war 包,会自动解压出来。而 Spring Boot 默认会内嵌一个 Tomcat,因此即便是 web 项目也可以直接打包成 jar 包,直接 java -jar 运行就可以了。
用 Spring Initialzr 创建的 web 项目(选择打包成 jar),只会有一个 spring-boot-starter-web 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
跟进去可以发现 这个依赖包括了 spring-boot-starter-tomcat 这个(内嵌tomcat的依赖包)。如果使用内部的 tomcat 部署,那么不需要对代码进行修改,直接 run xxApplication下的 Main 方法。
如果创建的是 war 的 web 项目,默认会多一个 ServletInitializer 文件,maven 会多一个 spring-boot-starter-tomcat 依赖。war 的项目,既可以用 Main 方法启动,也可以用外部的 tomcat 启动。
这样看来没有任何问题,如果之前建工程用的是 jar,最终需要用外部 tomcat 部署的,只需要进行如下修改:
// 1. 添加一个 ServletInitializer.java
// 2. Maven 中添加<packaging>war</packaging>。(默认是 jar)
// 3. 添加 spring-boot-starter-tomcat 依赖。(测试过,不加也没关系,但是既然 Spring Initialzr 创建时就自带了,还是加上好了)
如果你用的是 JSP,或许会有一些小问题。
一般博客都会写,如果需要用到 JSP,需要添加个依赖 tomcat-embed-jasper:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
需要特别注意的是:
- 虽然 spring-boot-starter-web 内嵌 tomcat,但是,内嵌的 spring-boot-starter-tomcat 仅仅包含了 tomcat-embed-core,而不包含 tomcat-embed-jasper。因此需要单独添加该依赖。
- 使用外部 tomcat 部署,并且用到了 JSP 的,需要有以下配置:
<!-- 把 web 中内嵌的 tomcat 去掉。(防止和外部 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>
<!-- 注意 tomcat-embed-jasper 的scope。(在编译测试的时候需要这个依赖的参与,但是在部署的时候 tomcat本身就有,这里也是防止冲突) -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
总结
- 默认目前一般都直接打成 jar 包进行部署。
- 如果需要部署 war 包的,最简单的方法就是 pom 中加上war,以及添加 ServletInitializer 文件(必须)。
- 如果有需要 JSP 的,添加 tomcat-embed-jasper 和其他需要的依赖。
- 至于上文中或者其他博客上提到的,需要在 web 包中排除 tomcat,或者 jasper 的 scope 必须是 provided,其实经过测试,改了和没改都一样。(没发生冲突的话,无关紧要;出错了,特别注意这里两个地方就可以了)
参考文献
Spring Boot 部署浅析(jar or war)的更多相关文章
- spring boot 部署为jar
前言 一直在ide中敲代码,使用命令行mvn spring-boot:run或者gradlew bootRun来运行spring boot项目.想来放到prod上面也应该很简单.然而今天试了下,各种问 ...
- Spring Boot部署之jar包运行
上篇阐述了Spring Boot war部署项目,本篇阐述另一种运行方式:jar包运行. 一.打jar包 1.修改pom.xml配置 2.执行package(对于module执行package之前需要 ...
- 使用idea对spring boot项目打jar和war包[文件]
pom.xml文件编写 打JAR包时 <groupId>com.netcorner</groupId> <artifactId>demo</artifactI ...
- Spring Boot部署之 web项目war包运行
传统的部署方式:将项目打成war包,放入tomcat 的webapps目录下面,启动tomcat,即可访问. 具体打war包流程: 1.pom.xml配置文件修改: 2.改造启动类,如果是war包发布 ...
- Spring Boot 直接用jar运行项目
概述 在Spring Boot 开篇-创建和运行一文中,介绍了如何创建一个Sprint Boot项目并且运行起来.但是运行的方式是在IDEA中直接Run起来的.还有另一中方式可以可以把Spring B ...
- 一些坑 Java 执行命令行命令 Spring Boot 打包为jar ResourceUtils.getFile 等出现的问题
Java 执行命令行命令 这个没技术含量的东西耗费了我半个多小时 String command = ....; Process process = Runtime.getRuntime().exec( ...
- Spring Boot部署方法
Spring Boot部署方法 网上搜到的部署方法无非是打成jar包,然后shell执行nohup java调用jar命令,或者是打成war包然后部署到tomcat或者jetty容器上面. S ...
- Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动
背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...
- spring boot 部署到tomcat
网上很多文章描述过,当我按步骤做时会抛各种错误,最后记录下我的做法(成功发布到本地 Tomcat9 ): 1.将项目的启动类Application.java继承SpringBootServletIni ...
随机推荐
- Python 编程语言要掌握的技能之一:编写条件分支代码的技巧
Python 里的分支代码 Python 支持最为常见的 if/else 条件分支语句,不过它缺少在其他编程语言中常见的 switch/case 语句. 除此之外,Python 还为 for/whil ...
- C#Windows Forms 计算器--xdd
一.计算器 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- day 35 协程 IO多路复用
0.基于socket发送Http请求 import socket import requests # 方式一 ret = requests.get('https://www.baidu.com/s?w ...
- 6. 彤哥说netty系列之Java NIO核心组件之Buffer
--日拱一卒,不期而至! 你好,我是彤哥,本篇是netty系列的第六篇. 简介 上一章我们一起学习了Java NIO的核心组件Channel,它可以看作是实体与实体之间的连接,而且需要与Buffer交 ...
- typedef & #defiine & struct
#define(宏定义)只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了. typedef是为了增加可读性而为标识符另起的新名称(仅仅只是个别名), ...
- HTML表格中各元素之间属性之间的相互影响
开发了一个动态表格制作程序,用的是谷歌浏览器.发现几个现象,记录如下: 1.按照技术文档的说法,正规的表格样式如下: <table> <caption>标题</capti ...
- 源码安装php7.2
`# 安装依赖包 yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel \ libjpeg libjpeg-devel lib ...
- 程序员修神之路--打通Docker镜像发布容器运行流程
菜菜哥,我看了一下docker相关的内容,但是还是有点迷糊 还有哪不明白呢? 如果我想用docker实现所谓的云原生,我的项目该怎么发布呢? 这还是要详细介绍一下docker了 Docker 是一个开 ...
- 一文了解Nuget的使用
Nuget介绍 官网定义:NuGet是.NET的软件包管理器(免费).NuGet客户端工具提供了生成和使用软件包的能力.NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库. ...
- 工作流Activity组件值数据传递获取问题
如图:先简单说一下大致过程 通过具体的菜单节点,加载具体的指令组件.本着低耦合的原件,需要将核查组件从指令组件重拆分出来,作为单独的组件根据业务需要拖拽到指令组件中.但是具体业务方面核查组件一方面需要 ...