SpringBoot 应用部署于外置 Tomcat 容器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hansonwang99
V2EX    Java

SpringBoot 应用部署于外置 Tomcat 容器

  •  
  •   hansonwang99
    hansonwang99 2018-06-05 07:08:48 +08:00 3917 次点击
    这是一个创建于 2745 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Desktop


    0x01. 概述

    SpringBoot 平时我们用的爽歪歪,爽到它自己连 Tomcat 都自集成了,我们可以直接编写 SBT 启动类,然后一键开启内置的 Tomcat 容器服务,确实是很好上手。但考虑到实际的情形中,我们的 Tomcat 服务器一般是另外部署好了的,有专门的维护方式。此时我们需要剥离掉 SBT 应用内置的 Tomcat 服务器,进而将应用发布并部署到外置的 Tomcat 容器之中,本文就实践一下这个。


    0x02. 修改打包方式

    修改项目的 pom.xml 配置,我们修改其打包方式为 war 方式,如:

    <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> 

    0x03. 移除 SBT 自带的嵌入式 Tomcat

    修改 pom.xml ,从 maven 的 pom 中移除 springboot 自带的的嵌入式 tomcat 插件

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 移除嵌入式 tomcat 插件 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> 

    0x04. 添加 servlet-api 依赖

    修改 pom.xml ,在 maven 的 pom 中添加 servlet-api 的依赖

    <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> 

    0x05. 修改启动类,并重写初始化方法

    在 SpringBoot 中我们平常用 main 方法启动的方式,都有一个 SpringBootApplication 的启动类,类似代码如下:

    @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

    而我们现在需要类似于 web.xml 的配置方式来启动 spring 应用,为此,我们在 Application 类的同级添加一个 SpringBootStartApplication 类,其代码如下:

    // 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法 public class SpringBootStartApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // 注意这里一定要指向原先用 main 方法执行的 Application 启动类 return builder.sources(Application.class); } } 

    0x06. 部署到外部的 Tomcat 容器并验证

    • 在项目根目录下(即包含pom.xml的目录)记性 maven 打包操作:
    mvn clean package 

    等待打包完成,出现 [INFO] BUILD SUCCESS 即为打包成功

    • 然后我们把target目录下生成的war包放到 tomcat 的webapps目录下,启动 tomcat,即可自动解压部署。

    最后在浏览器中验证:

    http://YOUR_IP:[端口号]/[打包项目名] 

    浏览器验证

    • 也可以直接将项目命名为 ROOT,这样访问根目录即可访问 tomcat 中的 SpringBoot 应用
    http://YOUR_IP:[端口号] 

    直接将项目命令为 ROOT

    浏览器验证


    0x07. 后记

    作者更多的 SpringBt 实践文章在此:


    如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:


    12 条回复    2018-06-10 20:38:38 +08:00
    nycbdwss
        1
    nycbdwss  
       2018-06-05 08:17:54 +08:00
    学习了谢谢
    suroi
        2
    suroi  
       2018-06-05 11:16:22 +08:00
    先 mark,虽然暂时用不到~
    lululau
        3
    lululau  
       2018-06-05 11:38:39 +08:00
    SBT 是什么鬼,Spring Boot 简称?
    chenguoyu
        4
    chenguoyu  
       2018-06-05 11:40:19 +08:00
    @lululau 应该是 spring boot tomcat 吧
    woscaizi
        5
    woscaizi  
       2018-06-05 13:06:46 +08:00
    @lululau #3 spring-boot-starter
    nadleeh0314
        6
    nadleeh0314  
       2018-06-05 13:20:59 +08:00
    先 mark 下
    liuxin5959
        7
    liuxin5959  
       2018-06-05 13:29:28 +08:00
    大佬,我是看你的文章长大的。
    hansonwang99
        9
    hansonwang99  
    OP
       2018-06-05 14:59:15 +08:00 via iPhone
    mark
    markolf
        10
    markolf  
       2018-06-06 09:07:57 +08:00
    额,这个是 spring boot 2.0 版本以上的吗
    LianMF
        11
    LianMF  
       2018-06-06 14:00:06 +08:00
    看到第一张图我就好兴奋
    WEAlex
        12
    WEAlex  
       2018-06-10 20:38:38 +08:00 via Android
    mark 一波。也许会用
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2880 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:13 PVG 21:13 LAX 05:13 JFK 08:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86