Spring Boot建议在构建期间使用嵌入式容器(tomcat或码头)创建一个可执行jar,并在运行时将此可执行jar作为独立进程使用。 但是,通常将应用程序部署到外部容器上是很常见的,Spring Boot提供了打包应用程序的方式,专门针对此类需求。

我在这里的重点不是重复关于创建war构件的已经详细的Spring Boot 指导 ,而是在测试创建的文件以查看它是否可以在独立容器上可靠地工作。 我最近在通过Spring Boot项目创建战争并将其部署在Jetty上时遇到了一个问题,这实际上是从该经验中学到的东西。

测试战争能否可靠进行的最佳方法是简单地使用jetty-maven和/或tomcat maven插件 ,并在pom.xml文件中添加以下条目:

<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version>
</plugin>
<plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.2.3.v20140905</version>
</plugin>

安装好插件后,使用tomcat插件开始战争:

mvn tomcat7:run

并带有码头插件:

mvn jetty:run

如果创建战争的方式存在任何问题,则应在启动时使用这些容器来解决。 例如,如果我要保留嵌入式tomcat依赖项:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

然后在启动maven tomcat插件时,将出现以下错误:

java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer

指示servlet jar与war文件打包在一起的指示,可以通过指定maven依赖项中提供的范围来解决:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>

为什么同时使用jetty和tomcat插件,原因是我看到了行为上的差异,特别是在websocket支持下,jetty作为运行时,而不是tomcat。 因此,请考虑通过以下方式拉出的websocket依赖项:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

这在使用jetty运行时启动时给了我一个错误,并且解决方法是再次标记提供的基础tomcat依赖项,并用以下内容替换上面的内容:

<dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId>
</dependency>
<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-websocket</artifactId><scope>provided</scope>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-messaging</artifactId>
</dependency>

因此,总而言之,一种验证为Spring-boot应用程序生成的war文件是否将干净地部署到容器(至少是tomcat和jetty)的快速方法是添加tomcat和jetty maven插件并使用这些插件来启动应用程序。 这是一个演示此示例的示例项目– https://github.com/bijukunjummen/spring-websocket-chat-sample.git

翻译自: https://www.javacodegeeks.com/2014/11/spring-boot-war-packaging.html

Spring靴子战争包装相关推荐

  1. sprint boot_Sprint Boot子战争包装

    sprint boot Spring Boot建议在构建期间使用嵌入式容器(tomcat或码头)创建一个可执行jar,并在运行时将此可执行jar作为独立进程使用. 但是,通常将应用程序部署到一个外部容 ...

  2. 部署Spring Boot Angular App(Maven和Tomcat)的4种方法

    在上一篇有关Spring Boot angular 5的文章中 ,我们使用Spring Boot angular 5实现了一个完整的堆栈端到端Web应用程序.在本文中,我们将讨论在tomcat上部署S ...

  3. Spring Boot参考指南

    Spring Boot参考指南 作者 菲利普·韦伯,戴夫 Syer,约什 长,斯特凡 尼科尔,罗布 绞车,安迪·威尔金森,马塞尔 Overdijk,基督教 杜普伊斯,塞巴斯蒂安·德勒兹,迈克尔·西蒙斯 ...

  4. Spring源码系列:BeanDefinition源码解析

    Bean的定义主要由BeanDefinition来描述的.作为Spring中用于包装Bean的数据结构,今天就来看看它的面纱下的真容吧. 首先就是BeanDefinition的类定义: public ...

  5. 面试:讲一讲Spring中的循环依赖

    前言 Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃 ...

  6. Spring AOP 的proxy详解

    spring 提供了多种不同的方案实现对 bean 的 aop proxy, 包括 ProxyFactoryBean, 便利的 TransactionProxyFactoryBean 以及 AutoP ...

  7. Spring - Java/J2EE Application Framework 应用框架 第 11 章 使用ORM工具进行数据访问

    第 11 章 使用ORM工具进行数据访问 11.1. 简介 Spring在资源管理,DAO实现支持以及实物策略等方面提供了与Hibernate, JDO和iBATIS SQL映射的集成. 对Hiber ...

  8. Spring - Java/J2EE Application Framework 应用框架 第 9 章 DAO支持

    第 9 章 DAO支持 9.1. 简介 Spring中的DAO(数据访问对象)支持主要的目标是便于以标准的方式使用数据访问技术, 如JDBC,Hibernate或者JDO.它不仅可以让你在这些技术间相 ...

  9. spring ResponseEntity

    spring ResponseEntity 1. 用途 ​ ResponseEntity用于后台服务返回给前端发送数据的格式化.开始的时候,我们用json包生产一个json的字符串,配合http 协议 ...

最新文章

  1. 如何用Python做Web开发?——Django环境配置
  2. Android无需权限显示悬浮窗, 兼谈逆向分析app
  3. CSS3的box-shadow属性:给指定的区域加阴影
  4. CDC之CreateCompatibleDC与BitBlt
  5. .netcore 堆栈调用方法小记
  6. 学渣的心酸(求职篇)
  7. [数据结构]P2.1 二叉搜索树
  8. Sping AOP概述
  9. 利用ENVI自带全球DEM数据计算区域平均高程
  10. 较新颖的智能优化算法
  11. ElacticSearch索引,文档,记录,常用指令
  12. angular2 全局路由守卫_Angular 路由守卫
  13. 好123主页篡改修复方法
  14. nRF53832开发环境搭建
  15. U盘容量变小?这儿有解决方法!
  16. AirServer2023免费无线Mac和PC电脑屏幕镜像投屏工具
  17. 网络摄像头工作原理_好,更好,最好以预算创建最终的远程工作者网络摄像头设置
  18. 遥感图像辐射增强ERDAS实现
  19. 小技巧 - 禁止复制的网站如何破解复制功能(知乎,360图书馆)?
  20. 观看《赢在中国 蓝天碧水间》观后感

热门文章

  1. 2019蓝桥杯省赛---java---C---5(最大降雨量)
  2. 云服务器的购买和宝塔面板的使用
  3. java弹弹球实验报告_Java弹球游戏实验报告—chen
  4. selenium 示例_Selenium测试中所需的功能和示例
  5. 设计模式 工厂方法_工厂方法设计模式
  6. adf开发_在EL表达式中引用ADF Faces组件
  7. 大文件拆分小文件求top_将文件拆分为流
  8. 英文连词_连词我们…讨厌
  9. java开发常见异常_最常见的Java异常及其对Java开发人员的评价
  10. 设计模式示例_复合设计模式示例