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>

需要特别注意的是:

  1. 虽然 spring-boot-starter-web 内嵌 tomcat,但是,内嵌的 spring-boot-starter-tomcat 仅仅包含了 tomcat-embed-core,而不包含 tomcat-embed-jasper。因此需要单独添加该依赖。
  2. 使用外部 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>

总结

  1. 默认目前一般都直接打成 jar 包进行部署。
  2. 如果需要部署 war 包的,最简单的方法就是 pom 中加上war,以及添加 ServletInitializer 文件(必须)。
  3. 如果有需要 JSP 的,添加 tomcat-embed-jasper 和其他需要的依赖。
  4. 至于上文中或者其他博客上提到的,需要在 web 包中排除 tomcat,或者 jasper 的 scope 必须是 provided,其实经过测试,改了和没改都一样。(没发生冲突的话,无关紧要;出错了,特别注意这里两个地方就可以了)

参考文献

原文地址:https://www.cnblogs.com/Sinte-Beuve/p/11569912.html

时间: 2024-08-03 18:35:24

Spring Boot 部署浅析(jar or war)的相关文章

Spring Boot 部署与服务配置

Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat.weblogic等等),当然在此之前你要对程序入口做简单调整. 项目构建我们使用Maven或Gradle,这将使项目依赖.jar包管理.以及打包部署变的非常方便. 一.内嵌 Server 配置 Spring Boot将容器内置后,它通过配置文件

十六、Spring Boot 部署与服务配置

spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat.weblogic等等),当然在此之前你要对程序入口做简单调整. 项目构建我们使用Maven或Gradle,这将使项目依赖.jar包管理.以及打包部署变的非常方便. 一.内嵌 Server 配置 Spring Boot将容器内置后,它通过配置文件

spring boot 部署

指定运行的内存 java -Xms10m -Xmx200m -jar xxx.jar spring boot 打包成war包: 让 SpringbootApplication 类继承 SpringBootServletInitializer 并重写 configure 方法,如下: @SpringBootApplication public class SpringbootApplication extends SpringBootServletInitializer { @Override p

Spring Boot项目打包方式为war

spring boot项目默认是使用内嵌的tomcat打包为jar的方式,我们可以进行一些修改让其打包方式为war包: 修改maven的pom.xml <packaging>war</packaging> 然后将内嵌的tomcat依赖修改为: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-tomc

Spring Boot配置文件放在jar外部

Spring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢? 查询官网,可以得到下面的几种方案: 通过命令行指定 SpringApplication会默认将命令行选项参数转换为配置信息例如,启动时命令参数指定: java -jar myproject.jar --server.port = 9000 从命令行指定配置项的优先级最高,不过你可以通过setAddCommandLineProperties来禁

spring boot部署系统--morphling简介

Morphling 简介 Morphling是一套基于Spring Boot 1.5开发的部署系统,依赖简单,一套Mysql即可运行,操作简单明了,适用于百台规模几下机器的运维操作 功能概述 系统部署 多角色配置,不同角色区分环境和菜单权限.不同环境可以做不同配置,满足一般公司的基本开发部署需求. 分为服务端,客户端两个服务.客户端安装在每个服务器上.部署时候服务端通知需要部署的机器,得到通知的客户端从服务端远程获取安装包部署. 缓存管理 基于spring-boot-starter方式引入缓存管

spring boot --部署war到tomcat中

1.在pom文件中,将默认的jar包打包,改成以war包打包:<!--打包方式--><packaging>war</packaging> 2.将项目在doc命令中执行 mvn install打包,生成项目的war包,可以在项目的target目录下面看到war包: 3.安装tomcat,将war放到tomcat的webapps目录下面,打开bin目录下面的startup.bat,如果是linux环境的话,可以通过以下方式查看tomcat的日志. 4.启动tomcat以后,

Spring Boot:项目打包成war并发布到Tomcat上运行

一.修改pom文件 1. 因为SpringBoot中嵌入的有Tomcat,因此要移除嵌入式的Tomcat插件 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 <!-- 移除嵌入式Tomcat --> 5 <exclusions> 6 <ex

spring boot工程打成JAR包到服务器上运行

只需在项目的pom.xml中加入下面插件 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin </artifactId> </plugin> <plugin> <groupId>org.springframework.boot