Java Bootstrap:Dropwizard与Spring Boot

如何在尽可能短的时间内使准备就绪的Java应用程序投入生产?

dropwizard.vs_.spring.boot_

我不是一个早起的人,所以有时需要一些时间才能启动“所有系统”提示。直到不久之前,这对于Java应用程序来说都是正确的,但是与发明贪睡功能不同闹钟,我们将在这里讨论的解决方案实际上更有意义。 借助Dropwizard,Spring Boot,Groovy的Grails和Scala的Play等现代开源框架! 您可以在几分钟内从头开始构建可用于生产环境的应用程序。 即使您不是早起的人。 即使您不喜欢巫师帽 。 在本文中,我们将讨论Dropwizard和Spring Boot与基于Java的轻量级框架的异同。

权衡:选择自由与速度需求

无论使用哪种框架,都牺牲了一些选择自由,因为Dropwizard和Spring boot都具有很高的判断力,并且坚信约定优于配置。 有多强? 通过并行比较,您会发现我们已经进行了比较,检查了每个第三方添加到组合中的第三方库的不同风格。 生产级应用程序需要的大多数(如果不是全部)核心功能都是现成的或可以集成使用。

这种牺牲的好处是速度,尽管有时玩弄新库并自定义您自己的完美环境很有趣。 当您需要快速起步并开始滚动时,最好委托这些决策并摆脱随之而来的复杂性。 这并非完全是蓝色药丸还是红色药丸的场景:当您启动并运行时,如果走得更远,您很有可能能够根据需要进行自定义和调整。 现在,只需将您最喜欢的构建工具(无论是Gradle还是Maven) 定向到Dropwizard和Spring Boot ,就可以了。

让我们深入研究并发现每个框架的哪些方面将使您陷入困境,以及在哪些方面可以变得更加灵活。

剧透警报:我们在塔基皮(Takipi)面临类似的困境, 因此决定与Dropwizard一起为企业提供塔基皮(Takipi)的内部风味。 但是曾经被视为Dropwizard的默认(也是唯一的)选择的情况,导致我们打破了Spring引导和用尽XML配置的偏见。

Dropwizard与Spring Boot:谁拥有您的后端?

生产级应用程序依赖于许多组件,并且每个框架都为我们做出了选择。 在此表中,所有放置RESTful Web应用程序的选择武器都放置在此表中,其中左上角有Dropwizard,上面有向导帽,右上角是Spring Boot,绿色短裤。 核心的现成库和附加组件由颜色分隔,Spring的内部依赖项标记为白色。

Dropwizard与Spring Boot:3rd Party库

Dropwizard与Spring Boot:3rd Party库

好的,现在我们对土地有了更好的了解,让我们看看这实际上告诉了我们什么。 我还建议您仔细看看每个框架,因为所有内容都是开源的,可以在GitHub上随心所欲地浏览:这是Dropwizard的源文件,这里是Spring Boot 。

Spring依赖

就像在罐子上说的那样,Spring Boot专注于Spring应用程序。 因此,如果您想进入Spring生态系统或已经熟悉它并需要建立一个快速的应用程序,那么这可能是您要走的路。 REST支持和DevOps功能(我们即将讨论的指标和运行状况检查)基于Spring Framework的核心,而DropWizard将其REST支持与Jersey一起使用 。 尽管在其他方面更灵活,但这几乎是Spring Boot锁定您的唯一方面。

HTTP服务器

在这里,我们可以看到Spring Boot如何变得更加灵活。 Dropwizard采用的约定优于配置方法,它比Spring Boot更为极端,并且完全基于Jetty,而Spring Boot默认采用Tomcat的可嵌入版本,但如果您偏爱Jetty甚至是RedHat的Undertow,则可以避免其他麻烦。

记录中

这是关于配置问题的相同约定的另一个示例,Dropwizard在v0.4中从log4j切换到Logback。 我猜测log4j2的最新GA版本可能会对此进行更改。 在Spring Boot的前面,如果需要记录,我们需要在Logback,log4j和log4j2之间进行选择。 顺便说一句,如果您使用的是Logback,则一定要检查一下我们运行以比较不同日志记录方法的性能的基准。

依赖注入

两种框架之间的主要区别是依赖注入支持。 众所周知,Spring的核心是内置于依赖注入支持中的,而Dropwizard并不是开箱即用的,您必须选择一种支持它的社区集成。 一个流行的选择是使用Google的Guice ,并使用社区 主导的 集成之一 。

测试– Fest vs. Hamcrest

这两个框架都有一个特殊的模块,用于测试, dropwizard测试和spring-boot-starter-test ,包括JUnit和Mockito依赖项。 Spring Boot自然也使用Spring Test,这里的主要区别在于匹配对象的形状,检查不同的对象是否匹配相同的模式。 Dropwizard支持FEST匹配器 (已不再开发),而Spring Boot与Hamcrest一起使用。

生产调试

与在开发阶段进行测试的内置解决方案不同,在将应用程序部署到生产环境中时,无法保证一切都会按计划进行。 特别是当您快速部署代码时 。 有了Takipi,您就可以知道哪些错误构成最高风险,将其划分优先级,并获得有关如何修复它们的可行信息。

没有操作就没有开发

为了获得生产级应用程序的称号,每个框架的核心功能都包括对指标,运行状况检查和任务的支持。 简而言之,度量标准使您可以跟踪统计信息,例如内存使用情况以及执行代码区域所需的时间。 健康检查是一种随时随地进行测试并回答问题的方法,例如,此插座是否仍然打开? 还是数据库连接仍然存在? 借助任务支持,您可以安排维护操作或定期任务。

Dropwizard指标库本身就已广受欢迎,您可以将其添加到任何项目中,甚至可以将其与Spring Boot的指标一起使用,以深入了解代码在生产中的作用。 一项很酷的功能是向Graphite或Ganglia等服务报告,并提供20多种可用的集成 。 运行状况检查还与Dropwizard指标一起提供,并且任务是作为框架的一部分实施的。 在Spring Boot前端,该框架使用Spring的核心功能来支持其Ops角度。

关于无容器的注意事项

无容器的Java HTTP服务器是导致创建Dropwizard的关键驱动程序,几年后又由Spring Boot引发。 与独立容器不同,您可以像在应用程序中添加任何其他库依赖项一样简单地添加HTTP服务器。 直观,易于更新,而且您无需处理任何WAR文件。 XML配置保持最少。 关于故事的部署结束,Dropwizard和Spring Boot都使用胖JAR将所有JAR及其依赖项打包到一个文件中,从而使使用快速单线部署更加容易。

社区和发布周期

Dropwizard最初由Coda Hale于2011年底在Yammer时代发布。 从那时起,它通过了大约20个版本,目前为0.7.1,作为现代Java应用程序的入门指南,它获得了社区的大力支持。 不利的一面是,每隔几个月发布一次之后,新版本就会放慢速度。 在即将到来的0.8版本中,我们预计将主要看到第三方版本的更新和较小的修复。 Dropwizard当前支持Java 7及更高版本,要在Java 8上使用它,您可以签出此部分更新,以享受其一些好处和新功能(或者如果您出于某种原因不喜欢joda-time)。

今天,您可以看到大部分来自Jochen Schalanda的提交, 其中包括160多个个人贡献者和数十个社区支持的集成,例如Datasift的dropwizard-extra 。 在可用的Dropwizard集成中, 还 包括 Spring支持。 您绝对应该检查的另一件事是此处的官方用户组。

随着Pivotal支持的Spring Boot在2014年以1.0版本加入游戏,几乎可以想到的任何第3方库都有40多种官方集成( Starter POM )。 这包括从日志记录到社交API集成的所有内容。 JHipster是一个值得一提的新Spring Boot项目,它是Spring Boot和Angular的Yeoman生成器。

最重要的是,可以说Dropwizard拥有一个更大的社区,并且Spring Boot拥有更好的官方和结构化支持,以及Spring的现有用户群。

结论

  1. 如果您希望进入Spring生态系统,那么选择Spring Boot可能是一个明智的选择。 它不仅是引导RESTful Java应用程序的一种方式,而且还充当与数十个服务集成的Spring的网关。 也许这里真正的问题是您是否应该开始寻找/回到Spring? 这可能是另一个完全可以讨论的话题 。 否则,Dropwizard将最适合您的需求。
  2. 这里的第二个问题是您如何依赖于依赖注入? 如果选择Guice,那么使用Dropwizard并使用其中一种社区集成将是一个简单的解决方案,而不是使用Spring依赖项注入方式。
  3. 最后但并非最不重要的一点是,看看并排比较,如果您要从头开始构建应用程序,那么哪个框架可以做出选择? 请记住默认选择,因为花费更多的时间配置这种引导类型会背叛其原因。

我希望您发现这种比较很有用,并且很高兴听到您对此的评论以及促使您选择其中一项的因素。

翻译自: https://www.javacodegeeks.com/2015/03/java-bootstrap-dropwizard-vs-spring-boot.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 查看libusb版本,linux / libusb获取usb设备路径

我使用libusb来枚举一些usb设备.现在我想获得“设备路径”.我认为这不是usb device-path,因为我没有成功使用谷歌.如果我用linux连接usb设备,我会在dmesg中收到一条消息,这里有一些带有usb温度传感器的“设备路径”的例子(类似于this):H_301_3直接到usb端口&#xf…

如何使用Apache Drill分析高度动态的数据集

当今的数据是动态的,并由应用程序驱动。 由诸如Web /社交/移动/ IOT等行业趋势驱动的新业务应用时代的增长正在生成具有新数据类型和新数据模型的数据集。 这些应用程序是迭代的,并且关联的数据模型通常是半结构化的,无模式的且不断发展的。 …

MVC中不能使用原生态的#include ,可替代的解决方案

<!--#include file"../stuff/foo/box.aspx"--> 1.可以用 <%: Html.Partial("~/Views/foo/box.ascx") %>OR <% Html.RenderPartial("~/Views/foo/box.ascx"); %> 2. Html.Raw(File.ReadAllText(Server.MapPath("~/html/te…

linux备份日志文件脚本,Linux篇:Shell脚本实现Gitlab双备份

01 前言最近成功从架构组拿到了Gitlab的管理权限&#xff0c;第一件事就是想着如何备份&#xff0c;以防数据丢失背大锅&#xff0c;于是在网上搜索一番&#xff0c;发现一段非常赞的备份脚本&#xff0c;记录照着操作一下&#xff1a;尤其是第二篇文章博主&#xff0c;有非常多…

物理数据模型(PDM)-概念数据模型 (CDM)-面向对象模型 (OOM):适用于已经设计好数据库表结构了。...

步骤如下&#xff1a; 一、反向生成物理数据模型PDM 开发环境 PowerDesigner 15 ,SQL Server2005 &#xff08;1&#xff09;在开始逆向生成PDM图之前&#xff0c;需要为指定的数据库创建ODBC数据源。以Windows xp操作系统为例&#xff0c;选择“开始”/“运行”命令&#xff0…

带有Hibernate OGM的NoSQL –第二部分:查询数据

1月底发布了Hibernate OGM的第一个最终版本之后&#xff0c;团队一直在忙于制作一系列教程式博客&#xff0c;使您有机会轻松地从Hibernate OGM重新开始。 第一部分是关于设置和保留您的第一个实体 。 在第二部分中&#xff0c;您将学习如何查询数据。 Hibernate OGM将使您以几…

Linux下做一个arp欺骗程序6,LINUX下防ARP欺骗攻击

arp欺骗的原理不多述&#xff0c;基本就是利用发送假的arp数据包&#xff0c;冒充网关。一般在网上通讯的时候网关的IP和MAC的绑定是放在arp 缓存里面的&#xff0c;假的arp包就会刷新这个缓存&#xff0c;导致本该发送到网关的数据包发到了欺骗者那里。解决的办法就是静态arp。…

MySQL作为Kubernetes服务,可从WildFly Pod访问

Kubernetes上使用Vagrant的Java EE 7和WildFly&#xff08;技术提示&#xff03;71&#xff09;介绍了如何在使用Kubernetes和Docker托管的WildFly上运行琐碎的Java EE 7应用程序。 Java EE 7应用程序是在世界范围内交付的动手实验室 。 它使用与WildFly捆绑在一起的内存数据库…

几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较

几大最短路径算法比较 转自&#xff1a;http://blog.csdn.net/v_july_v/article/details/6181485 几个最短路径算法的比较&#xff1a;Floyd 求多源、无负权边的最短路。用矩阵记录图。时效性较差&#xff0c;时间复杂度O(V^3)。 Floyd-Warshall算法&#xff08;Floyd-W…

linux系统creat函数,Linux系统调用之creat函数

Linux中系统调用很多&#xff0c;但是再多也有几种不变的根本&#xff1a;创建&#xff0c;打开&#xff0c;写&#xff0c;读&#xff0c;关闭&#xff0c;删除&#xff0c;等最最基本的操作&#xff0c;就像人们所常说的&#xff0c;Linux上的一切我们都可以当做文件来处理&a…

防止在多模块Maven中找到“未找到插件”

在多模块Maven项目的子模块上定义Maven插件会给我们“找不到插件”错误。 尤其是如果我们有一个多模块项目&#xff0c;并且只想在一个特定模块中应用Maven插件&#xff0c;则此错误会经常发生。 假设我们有一个看起来像这样的多模块root pom。 <project xmlns"http:…

linux 4412跑程序,荣品4412的板子上跑纯linux

昨天开始突然想在4412上面跑人QT玩&#xff0c;首先得跑个纯linux昨天做好第一步&#xff0c;把根文件系统&#xff0c;用make_ext4fs 打包。make_ext4fs -l 34M -s system.img minifs/然后在uboot启动命令中把启动参数修改&#xff1a;setenv bootargs noinitrd root/dev/mmcb…

ASP.NET MVC 笔记

&#xff08;从今天开始&#xff0c;还是换回默认的代码高亮插件吧。。。话说此篇仅供个人遗忘后查阅&#xff0c;木有详尽解释。。。&#xff09; 1、Controller中的所有Action方法不限制返回值类型&#xff0c;返回值应该至少可以被ToString()&#xff0c;这样最终页面上呈现…

JPA 2.1:不同步的持久性上下文

JPA 2.1版带来了一种新的方式来处理持久性上下文与当前JTA事务以及资源管理器之间的同步。 术语资源管理器来自Java事务处理API &#xff0c;它表示操纵一个资源的组件&#xff08;例如&#xff0c;使用JDBC驱动程序操纵的具体数据库&#xff09;。 默认情况下&#xff0c;容器…

麒麟Linux启动目录,优麒麟目录结构介绍 系统入门必备

对于Linux爱好者来说&#xff0c;深入了解Linux文件目录结构的标准和每个目录的详细功能&#xff0c;对于我们用好Linux系统至关重要&#xff0c;下面就由小编给大家介绍下优麒麟系统的目录结构&#xff0c;PS: 同样适用于其他Linux发行版。查看系统的全部目录&#xff1a;* 在…

java课堂作业(一)

1、环境变量配置参见&#xff1a;http://www.cnblogs.com/dongwenbo/p/3282014.html window ---> preference ---> java ---> installed jres ---> add jres tomcat 配置&#xff1a;myeclipse ---> preferences ---> myeclipse enterprise workbench --->…

为什么我的JVM访问的内存少于通过-Xmx指定的内存?

“嘿&#xff0c;你能来看看奇怪的东西吗&#xff1f;” 这就是我开始研究一个支持案例的方式&#xff0c;该案例将我引向了这篇博客文章。 当前的特殊问题与不同的工具报告了有关可用内存的不同数字有关。 简而言之&#xff0c;一位工程师正在研究特定应用程序的过多内存使用…

linux怎么安装高德导航软件,高德地图车机版如何安装?高德地图车机版安装教程...

高德地图车机版是高德为汽车车载机提供的一个专用版本&#xff0c;对于车主们来说有时候用手机导航实在是非常不方便&#xff0c;不仅屏幕小而且还可能中途来个电话什么的。高德地图车机版可以帮你的车载机装上导航地图&#xff0c;就算你不想买导航设备也能让你的车子为你导航…

SharePoint 2010 技术参数(整理)

今天整理一些 SharePoint 2010 的技术参数&#xff0c;其内容都来自 SharePoint-Sandbox 网站。 有些参数值是硬性的&#xff0c;比如列表单条记录的尺寸&#xff1b;而有些是为了使用和性能考虑的推荐值。 技术参数值列表最大记录数500万条列表单条记录上限8KB&#xff08;不含…

Dropwizard,MongoDB和Gradle实验

介绍 我使用Dropwizard&#xff0c;MongoDB和Gradle创建了一个小项目。 它实际上是从一个实验性的Guava缓存开始的&#xff0c;作为将计数器发送到MongoDB&#xff08;或任何其他DB&#xff09;的缓冲区。 我也想尝试MondleDB插件的Gradle。 接下来&#xff0c;我想创建某种接口…