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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

java课堂作业(一)

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

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

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

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

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

Dropwizard,MongoDB和Gradle实验

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

在wp中,使用NavigationService.Navigate导航页面出现错误

我们在WP项目中采用页面导航时候,经常会使用以下代码 NavigationService.Navigate(new Uri("/Page1.xaml",UriKind.Relative));但是,有的时候会出现错误: "Error 1 An object reference is required for the non-static field…

SSDT – Error SQL70001 This statement is not recognized in this context-摘自网络

March 28, 2013 — arcanecode One of the most common errors I get asked about when using SQL Server Data Tools (SSDT) Database Projects is the error “This statement is not recognized in this context”. This is actually a pretty simple error to fix. Envisi…

带有JAX-RS和PrimeFaces的RESTful图表

通常,利用图表提供数据的可视表示很有用。 PrimeFaces提供制图解决方案,可轻松将数据的可视表示形式添加到Web和移动应用程序中。 如果将PrimeFaces图表组件与RESTful Web服务数据结合使用,我们可以创建自定义图表,以适合桌面和移…

UVAlive 6131 dp+斜率优化

这道题和06年论文《从一类单调性问题看算法的优化》第一道例题很相似。 题意:给出n个矿的重量和位置,这些矿石只能从上往下运送,现在要在这些地方建造m个heap,要使得,sigma距离*重量最小。 思路:O(n ^ 3)的…

c语言程序整数四则运算,c语言中三个整数随机的四则运算

满意答案hors10722014.01.06采纳率:58% 等级:12已帮助:18274人#include #include #include #define N 10 //随机出10道题目int main(){int num1, num2, num3, count0, result,resultTrue,flag;//result:用户输入结果 resultTrue:正确结果 …

带有调试器的Apache Camel Eclipse工具

大约2个月前, Lars Heineman在 JBoss工具堆栈中的博客中介绍了改进的Apache Camel Eclipse工具。 在即将发布的版本中,他们将Camel调试器与本机Eclipse调试器集成在一起,因此当您使用断点时,您将获得Eclipse调试体验,…

HarmonyOS的功能及场景应用

一、基本介绍 鸿蒙HarmonyOS主要应用的设备包括智慧屏、平板、手表、智能音箱、IoT设备等。具体来说,鸿蒙系统是一款面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备…

SX-BOX试用笔记

1.今天开始试用SX-BOX,我将用它来做自己平时的开发和文档的工作,因为我的职责是一个程序员。 1.屏幕如果支持更大的也清晰的话,我会感觉很舒服。 2.USB设备插入还无法识别。。。 3.现在开始安装开发工具,目前我打算在上面安装Adob…

c语言成绩转换绩点,如何将平时成绩转化为GPA成绩?

新东方留学生资料下载姓名手机号短信验证码图片验证码年级请选择5年级6年级7年级8年级9年级高一高二高三高三复习大一大二大三大四大五研一研二研三博一博二在职课程请选择雅思托福GREGMATSAT其他行政区请选择请选择请选择{"name":{"label":"姓名&quo…

Hibernate查询缓存如何工作

介绍 既然我已经介绍了实体和集合缓存,现在该研究查询缓存的工作原理了。 查询缓存与实体严格相关,它在搜索条件和满足该特定查询过滤器的实体之间绘制关联。 像其他Hibernate功能一样,查询缓存也不像人们想象的那么琐碎。 实体模型 对于我…

Javascript学习笔记1 数论

1.Javascript不用担心内存的回收与对象的销毁! 2.Javascript有:infinity、NaN全局变量表示 被0整除的无穷 和 非数字。undefined和null表示 未定义 和 空,undefined和null可以互换,判别二者需用 全等 号(不光判断值&…

JavaFX技巧20:有很多需要展示的地方吗? 使用画布!

JavaFX应用程序似乎有两种:第一种使用带有节点和CSS样式的场景图,第二种使用单个画布。 但是,将这两种方法混合使用是完全合法的。 尤其是当您的应用程序必须显示大量详细信息时,您很容易最终创建成千上万个节点。 即使JavaFX的整…

VirtualBox命令更改虚拟硬盘空间

主要是使用VBoxManage命令来操作第一步:打开CMD,进入到virtualbox存放虚拟机的目录中(win7 系统可以直接在文件夹空白处按住shift键右键鼠标选择[在此处打开命令窗口]),输入[vboxmanage list hdds]可以查看所有的虚拟机的信息,这里…