1、前言

最近在做项目过程中遇到了一个需求,就是SpringBoot项目在Idea中用gradle命令打成war包部署到Tomcat,关于这一问题在网上看了很多博客,内容有相同的地方,也有不同的地方,甚至也有冲突的地方,所以本人就简单的了解了一下,将结果总结如下。

2、打包的配置

一般创建SringBoot项目都会到Spring Initializr 上面进行创建,这是官方提供的一个界面化的初始化工具,前段时间改版了一次,最新的界面如下:

idea使用gradle打docker包 idea打包gradle项目_war包

我们选择Gradle Project 和Packaging 为War生成项目,在Idea中打开项目,如果操作系统已经配置好Gradle,直接可以在Terminal中执行gradle build命令即可打包成功,war包保存在build/libs/目录下。经过测试可以在tomcat下运行。

接下来我们来看看这样生成的项目和以往的项目有什么区别。经过比较我们发现需要打成war需要配置两个地方:

1、build.gradle中plugins中加id:'war'

idea使用gradle打docker包 idea打包gradle项目_spring_02

 以上两种写法都可以。

2、继承SpringBootServletInitializer

此处有两种方式:

1、官方生成的SpringBoot项目中是在项目主入口类(TestApplication)同级目录下生成ServletInitializer类继承SpringBootServletInitializer并重写configure方法,如下图所示:

idea使用gradle打docker包 idea打包gradle项目_spring_03

2、项目主入口类(TestApplication)直接继承SpringBootServletInitializer并重写configure方法,如下图所示:

idea使用gradle打docker包 idea打包gradle项目_gradle打war包_04

经过测试、只需要经过这两个配置就可以直接打包(war包)成功并且可以在tomat中启动运行。

3、同一个Tomcat运行多个SpringBoot项目

网上很多文章提到要在同一个Tomcat中运行两个SpringBoot项目必须在application.yml进项配置,要是不配置的话只能运行一个,本人在测试打包的过程中同时运行过两个不同SpringBoot项目可以直接启动成功,并且访问两个不同的项目。为防止各位看官在部署过程中遇到这样的问题,列举两个比较通用的配置方法供大家参考:

1、配置spring.jmx.enabled=false

#spring.jmx.enabled=false 可以在一个tomcat启动多个springboot项目
spring:  
  jmx:
    enabled: false

2、配置spring.jmx.default-domain=项目名称

spring:  
  jmx:
    default-domain: 项目名称

4、后记

以上代码除了第3个问题其他的都已在实际项目测试过,如果有问题可以随时留言交流讨论。