SpringBoot应用部署于外置Tomcat容器

来源:https://my.oschina.net/hansonwang99/blog/1824245


概述


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


修改打包方式


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


  1. <groupId>com.example</groupId>

  2. <artifactId>demo</artifactId>

  3. <version>0.0.1-SNAPSHOT</version>

  4. <packaging>war</packaging>


移除SBT自带的嵌入式Tomcat


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


  1. <dependency>

  2.    <groupId>org.springframework.boot</groupId>

  3.    <artifactId>spring-boot-starter-web</artifactId>

  4.    <!-- 移除嵌入式tomcat插件 -->

  5.    <exclusions>

  6.        <exclusion>

  7.            <groupId>org.springframework.boot</groupId>

  8.            <artifactId>spring-boot-starter-tomcat</artifactId>

  9.        </exclusion>

  10.    </exclusions>

  11. </dependency>


添加servlet-api依赖


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


  1. <dependency>

  2.    <groupId>javax.servlet</groupId>

  3.    <artifactId>javax.servlet-api</artifactId>

  4.    <version>3.1.0</version>

  5.    <scope>provided</scope>

  6. </dependency>


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


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


  1. @SpringBootApplication

  2. public class Application {

  3.    public static void main(String[] args) {

  4.        SpringApplication.run(Application.class, args);

  5.    }

  6. }


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


  1. // 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法

  2. public class SpringBootStartApplication extends SpringBootServletInitializer {

  3.    @Override

  4.    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

  5.        // 注意这里一定要指向原先用main方法执行的Application启动类

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

  7.    }

  8. }


部署到外部的Tomcat容器并验证


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


  1. mvn clean package


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


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


最后在浏览器中验证:


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

SpringBoot应用部署于外置Tomcat容器

  • 也可以直接将项目命名为ROOT,这样访问根目录即可访问tomcat中的SpringBoot应用


  1. http://YOUR_IP:[端口号]

SpringBoot应用部署于外置Tomcat容器

SpringBoot应用部署于外置Tomcat容器

· 今日福利 ·


2018世界杯总决赛巅峰对决在即,极客时间的《技术领导力300讲专栏》超级团燃情上线。


池建强、冯大辉、左耳朵耗子、tinyfool 四位技术大佬轮番上阵,领衔开团,邀你一起拼,让强者更强。

SpringBoot应用部署于外置Tomcat容器

- END -

 往期推荐:

  • 死磕Java系列:

  1. 深入分析ThreadLocal

  2. 深入分析synchronized的实现原理

  3. 深入分析volatile的实现原理

  4. Java内存模型之happens-before

  5. Java内存模型之重排序

  6. Java内存模型之分析volatile

  7. Java内存模型之总结

  8. J.U.C之AQS简介

  9. J.U.C之AQS:CLH同步队列

  10. J.U.C之AQS同步状态的获取与释放

  11. J.U.C之AQS阻塞和唤醒线程

  12. J.U.C之重入锁:ReentrantLock

  13. J.U.C之读写锁:ReentrantReadWriteLock

  14. J.U.C之Condition

  15. J.U.C之并发工具类:CyclicBarrier

  16. J.U.C之并发工具类:Semaphore

  17. J.U.C之并发工具类:CountDownLatch

……

  • Spring系列:

  1. Spring Cloud Zuul中使用Swagger汇总API接口文档

  2. Spring Cloud Config Server迁移节点或容器化带来的问题

  3. Spring Cloud Config对特殊字符加密的处理

  4. Spring Boot使用@Async实现异步调用:使用Future以及定义超时

  5. Spring Cloud构建微服务架构:分布式配置中心(加密解密)

  6. Spring Boot快速开发利器:Spring Boot CLI

……

可关注我的公众号

SpringBoot应用部署于外置Tomcat容器

深入交流、更多福利

扫码加入我的知识星球

SpringBoot应用部署于外置Tomcat容器

点击“阅读原文”,看本号其他精彩内容