您的位置:网站首页 > Java游戏 > 正文

@Java 开发者Spring Boot 最流行的 16 条实践解读!

类别:Java游戏 日期:2019-5-18 14:01:00 人气: 来源:

  Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验和一些熟知的Spring Boot专家的文章。

  在本文中,我将重点介绍Spring Boot特有的实践(大多数时候,也适用于Spring项目)。以下依次列出了最佳实践,排名不分先后。

  Spring Boot项目本身使用和集成了大量的开源项目,它帮助我们了这些第三方依赖。但是也有一部分在实际项目使用中并没有包括进来,这就需要我们在项目中自己版本。如果在一个大型的项目中,包括了很多未开发模块,那么起来就非常的繁琐。

  怎么办呢?事实上,Spring IO Platform就是做的这个事情,它本身就是Spring Boot的子项目,同时了其他第三方开源库。我们可以借鉴Spring IO Platform来编写自己的基础项目platform-bom,所有的业务模块项目应该以BOM的方式引入。这样在升级第三方依赖时,就只需要升级这一个依赖的版本而已。

  Spring Boot的一个主要特性是使用自动配置。这是Spring Boot的一部分,它可以简化你的代码并使之工作。当在类径上检测到特定的jar文件时,自动配置就会被激活。

  使用它的最简单方法是依赖Spring Boot Starters。因此,如果你想与Redis进行集成,你可以首先包括:

  借助于这些starters,这些繁琐的配置就可以很好地集成起来并协同工作,而且它们都是经过测试和验证的。这非常有助于避免的Jar()。

  Spring Initializr()提供了一个超级简单的方法来创建一个新的Spring Boot项目,并根据你的需要来加载可能使用到的依赖。

  使用Initializr创建应用程序可确保你获得经过测试和验证的依赖项,这些依赖项适用于Spring自动配置。你甚至可能会发现一些新的集成,但你可能并没有意识到这些。

  如果你在一个严重依赖Spring Boot的公司或团队中工作,并且有共同的问题需要解决,那么你可以创建自己的自动配置。

  这项任务涉及较多工作,因此你需要考虑何时获益是值得投入的。与多个略有不同的定制配置相比,单个自动配置更容易。

  如果将这个提供Spring Boot配置以开源库的形式发布出去,那么将极大地简化数千个用户的配置工作。

  避免使用默认包。确保所有内容(包括你的入口点)都位于一个名称很好的包中,这样就可以避免与装配和组件扫描相关的意外情况;

  我将控制器和服务放在以功能为导向的模块中,但这是可选的。一些非常好的开发人员将所有控制器放在一起。不论怎样,一种风格!

  Controller应该非常简单。你可以在此处阅读有关GRASP中有关控制器模式部分的说明()。你希望控制器作为协调和委派的角色,而不是执行实际的业务逻辑。以下是主要做法:

  要深入这个内容,需要进一步地了解设计REST API的最佳实践。无论你是否想要使用Spring Boot,都是值得学习的。

  Service是Spring Boot的另一个核心概念。我发现最好围绕业务功能/领域/用例(无论你怎么称呼都行)来构建服务。

  你可以决定使用Controler和Service之间的一对一映射,那将是理想的情况。但这并不意味着,Service之间不能互相调用!

  我之前还不确定如何在Spring Boot中最好地处理数据库交互。在阅读了罗伯特·C·马丁的“Clear Architecture”之后,对我来说就清晰多了。

  你希望你的数据库逻辑于服务分离出来。理想情况下,你不希望服务知道它正在与哪个数据库通信,这需要一些抽象来封装对象的持久性。

  罗伯特C.马丁强烈地说明,你的数据库是一个“细节”,这意味着不将你的应用程序与特定数据库耦合。过去很少有人会切换数据库,我注意到,使用Spring Boot和现代微服务开发会让事情变得更快。

  考虑到“Clear Architecture”的教训,你还应该你的业务逻辑。将各种Spring Boot代码混合在一起常诱人的……不要这样做。如果你能抵制,你将保持你的业务逻辑可重用。

  保持业务逻辑免受Spring Boot代码侵入的一种方法是使用构造函数注入。 不仅是因为@Autowired注解在构造函数上是可选的,而且还可以在没有Spring的情况下轻松实例化bean。

  我写过的最受欢迎的文章之一是“介绍Spring Boot中的并发”()。我认为这样做的原因是这个领域经常被和忽视。如果使用不当,就会出现问题。

  在Spring Boot中,Controller和Service是默认是单例。如果你不小心,这会引入可能的并发问题。 你通常也在处理有限的线程池。请熟悉这些概念。

  你可以手动处理Spring应用程序的配置。如果你正在处理多个Spring Boot应用程序,则需要使配置管理能力更加强大。

  这些选项中的任何一个(第二个选项多一些)都要求你在DevOps更少工作量,但这在微服务领域是很常见的。

  你也可以在控制器上添加@ExceptionHandler注解,这在某些特定场景下使用可能会很有用。

  这与Spring中的几乎相同,并且Baeldung有一篇关于REST与Spring的错误处理的详细文章(),非常值得一读。

  你可能已经意识到这一点,但你应该使用Logger进行日志记录,而不是使用System.out.println()手动执行。梦见自己杀人不见血这很容易在Spring Boot中完成,几乎没有配置。只需获取该类的记录器实例:

  这不是Spring Boot特有的,但它需要提醒——测试你的代码!如果你没有编写测试,那么你将从一开始就编写遗留代码。

  如果有其他人使用你的代码库,那边改变任何东西将会变得。当你有多个服务相互依赖时,这甚至可能更具风险。

  由于存在Spring Boot最佳实践,因此你应该考虑将Spring Cloud Contract用于你的消费者驱动契约,它将使你与其他服务的集成更容易使用。

  使用Spring Boot测试代码可能很棘手——你需要初始化数据层,连接大量服务,模拟事物……实际上并不是那么难!答案是使用测试切片。

  使用测试切片,你可以根据需要仅连接部分应用程序。这可以为你节省大量时间,并确保你的测试不会与未使用的内容相关联。来自spring.io的一篇名为Custom test slice with Spring test 1.4的博客文章()解释了这种技术。

  感谢Spring Boot,编写基于Spring的微服务正变得前所未有的简单。我希望通过这些最佳实践,你的实施过程不仅会变得很快,而且从长远来看也会更加强大和成功。祝你好运!

  编译:严小雨,10多年JAVA技术开发和系统架构经验,目前主要方向是Web安全、微服务架构和大数据应用,业余喜欢读书、跑步和写文章,积极参与开源技术推广和布道。个人微信号:rainboyan。

   文章来源于850游戏博贝棋牌

关键词:java主流框架
0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved