如何在尽可能短的时间内使准备就绪的Java应用程序投入生产?
我不是一个早起的人,所以有时需要一些时间才能启动“所有系统”提示。直到不久之前,这对于Java应用程序来说都是正确的,但是与发明贪睡功能不同闹钟,我们将在这里讨论的解决方案实际上更有意义。 借助Dropwizard,Spring Boot,Groovy的Grails和Scala的Play等现代开源框架! 您可以在几分钟内从头开始构建可用于生产环境的应用程序。 即使您不是早起的人。 即使您不喜欢巫师帽 。 在本文中,我们将讨论Dropwizard和Spring Boot与基于Java的轻量级框架的异同。
新话题:Java的引导:Dropwizard与Spring启动http://t.co/5QtUj7eoPc pic.twitter.com/QPoOt1ztOu
— Takipi(@takipid) 2015年3月2日
权衡:选择自由与速度需求
无论使用哪种框架,都牺牲了一些选择自由,因为Dropwizard和Spring boot都具有很高的判断力,并且坚信约定优于配置。 有多强? 通过并行比较,您会发现我们已经进行了比较,检查了每个第三方添加到组合中的第三方库的不同风格。 生产级应用程序需要的大多数(如果不是全部)核心功能都是现成的或可以集成使用。
这种牺牲的好处是速度,尽管有时玩弄新库并自定义您自己的完美环境很有趣。 当您需要快速起步并开始滚动时,最好委托这些决策并摆脱随之而来的复杂性。 这并非完全是蓝色药丸还是红色药丸的场景:当您启动并运行时,如果走得更远,您很有可能能够根据需要进行自定义和调整。 现在,只需将您最喜欢的构建工具(无论是Gradle还是Maven) 定向到Dropwizard和Spring Boot ,就可以了。
让我们深入研究并发现每个框架的哪些方面将使您陷入困境,以及在哪些方面可以变得更加灵活。
剧透警报:我们在塔基皮(Takipi)面临类似的困境, 因此决定与Dropwizard一起为企业提供塔基皮(Takipi)的内部风味。 但是曾经被视为Dropwizard的默认(也是唯一的)选择的情况,导致我们打破了Spring引导和用尽XML配置的偏见。
Dropwizard与Spring Boot:谁拥有您的后端?
生产级应用程序依赖于许多组件,并且每个框架都为我们做出了选择。 在此表中,所有放置RESTful Web应用程序的选择武器都放置在此表中,其中左上角有Dropwizard,上面有向导帽,右上角是Spring Boot,绿色短裤。 核心的现成库和附加组件由颜色分隔,Spring的内部依赖项标记为白色。
好的,现在我们对土地有了更好的了解,让我们看看这实际上告诉了我们什么。 我还建议您仔细看看每个框架,因为所有内容都是开源的,可以在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的现有用户群。
结论
- 如果您希望进入Spring生态系统,那么选择Spring Boot可能是一个明智的选择。 它不仅是引导RESTful Java应用程序的一种方式,而且还充当与数十个服务集成的Spring的网关。 也许这里真正的问题是您是否应该开始寻找/回到Spring? 这可能是另一个完全可以讨论的话题 。 否则,Dropwizard将最适合您的需求。
- 这里的第二个问题是您如何依赖于依赖注入? 如果选择Guice,那么使用Dropwizard并使用其中一种社区集成将是一个简单的解决方案,而不是使用Spring依赖项注入方式。
- 最后但并非最不重要的一点是,看看并排比较,如果您要从头开始构建应用程序,那么哪个框架可以做出选择? 请记住默认选择,因为花费更多的时间配置这种引导类型会背叛其原因。
我希望您发现这种比较很有用,并且很高兴听到您对此的评论以及促使您选择其中一项的因素。
翻译自: https://www.javacodegeeks.com/2015/03/java-bootstrap-dropwizard-vs-spring-boot.html