惠州网站建设 英语6,网站建设优惠券,室内装潢设计专业培训,腾讯云建站平台转载自 Spring Boot 最佳实践
Spring Boot是用于开发微服务的最流行的Java框架。在本文中#xff0c;我将与您分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。本文基于我的个人经验和认可的Spring Boot方面的专家。
在本文中#xff0c;我将重点介绍Spr…转载自 Spring Boot 最佳实践
Spring Boot是用于开发微服务的最流行的Java框架。在本文中我将与您分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。本文基于我的个人经验和认可的Spring Boot方面的专家。
在本文中我将重点介绍Spring Boot特有的实践大多数时候也适用于Spring项目。
以下最佳实践未按特定顺序列出。
1使用自动配置
Spring Boot的一个主要功能是使用自动配置。这是Spring Boot的一部分它使您的代码可以正常工作。当在类路径上检测到特定的jar文件时它会被激活。
使用它的最简单方法是依赖Spring Boot Starters。因此如果您想与Redis进行交互您可以首先包括
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-data-redis/artifactId
/dependency
如果你想使用MongoDB
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-mongodb/artifactId
/dependency
对于初学者来说您使用这些经过测试和验证的配置可以很好地协同工作。
通过使用以下注释属性可以从自动配置中排除某些类
EnableAutoConfigurationexclude {ClassNotToAutoconfigure.class}
但只有在绝对必要时才应该这样做。
2使用Spring Initializr启动新的Spring Boot项目
Spring Initializr 为您提供了一个简单的方法来启动一个新的Spring Boot项目并使用您可能需要的依赖项加载它。
使用Initializr创建应用程序可确保您获得经过测试和批准的依赖项这些依赖项适用于Spring自动配置。您甚至可能会发现一些您不了解的新集成。
3考虑为常见的组织问题创建自己的自动配置
这个是针对高级用户的。
如果您在一个严重依赖Spring Boot的组织中工作并且您有共同的问题需要解决那么您可以创建自己的自动配置。
这项任务涉及更多因此您需要考虑何时获益是值得投资的。与多个定制配置相比维护单个自动配置更容易所有配置都略有不同。
如果要将库发布到开源提供Spring Boot配置将极大地简化数千个用户的采用。
4正确构建代码
虽然允许你有很大的自由但是有一些基本规则值得关注然后列出你的源代码。 避免使用默认包。确保所有内容包括您的入口点都位于一个名称很好的包中。这样您就可以避免与布线和元件扫描相关的意外情况。 将Application.java 您的条目类保留 在顶级源目录中。 我建议将控制器和服务保存在以功能为导向的模块中但这是可选的。一些非常好的开发人员建议将所有控制器放在一起 坚持一种风格
5保持Controller的清洁和专注
控制器应该非常薄。您希望控制器协调和委派而不是执行实际的业务逻辑。以下是主要做法 控制器应该是无状态的默认情况下控制器是单例并且任何状态都可能导致大量问题。 控制器不应该执行业务逻辑而是依赖委托。 控制器应该处理应用程序的HTTP层。这不应该传递给服务。 控制器应该围绕用例/业务能力。
要深入到这里将开始讨论设计REST API的最佳实践。无论您是否想要使用Spring Boot都值得学习。
6围绕业务功能构建Service
服务是Spring Boot的另一个核心概念。我发现最好围绕业务功能/域/用例构建服务称之为您想要的。
使用称为AccountServiceUserServicePaymentService之 类的服务的应用程序比使用DatabaseServiceValidationServiceCalculationService等的应用程序更容易处理。
您可以决定使用控制器和服务之间的1对1映射。那将是理想的。这并不意味着服务不能互相使用
7使您的数据库成为一个细节 - 从核心逻辑中抽象出来
我曾经不确定如何在Spring Boot中最好地处理数据库交互。在阅读了罗伯特·C·马丁的“整洁的架构”之后对我来说更加清晰。
您希望从服务中抽象出您的数据库逻辑。理想情况下您不希望服务知道它正在与哪个数据库通信。有一些抽象可以封装对象的持久性。
罗伯特C.马丁热情地争辩说你的数据库是一个“细节”。这意味着不将您的应用程序耦合到特定数据库。过去很少有人会切换数据库。我注意到使用Spring Boot和现代微服务开发 - 事情变得更快。
8保持业务逻辑不受Spring Boot代码的影响
考虑到“整洁的架构”的教训您还应该保护您的业务逻辑。将各种Spring Boot代码混合在一起是非常诱人的......不要这样做。如果你抵制诱惑你将保持你的业务逻辑可重用。
部分服务通常成为库。如果您不必从代码中删除大量Spring注释则更容易创建。
9支持构造函数注入
保持业务逻辑免受Spring Boot代码攻击的一种方法是依赖于Constructor Injection。Autowired注释不仅在构造函数上是可选的而且还可以在没有Spring的情况下轻松实例化bean。
10熟悉并发模型
在Spring Boot中控制器和服务是默认的Singletons。如果你不小心这会引入可能的并发问题。您通常也在处理有限的线程池。
11外部化和成熟您的配置管理
这一点超出了Spring Boot虽然这是人们开始创建多个类似服务时常见的问题......
您可以手动处理配置Spring应用程序。如果您正在处理许多Spring Boot应用程序则需要使配置管理成熟。
我建议两种主要方法 使用配置服务器例如Spring Cloud Config 将所有配置存储在环境变量中可以基于git存储库进行配置
这些选项中的任何一个第二个选项都要求您在DevOps区域中轻轻一点但这在微服务领域是可以预期的。
12提供全局异常处理
你真的需要一种处理异常的一致方法。Spring Boot提供了两种主要方法 您应该使用 HandlerExceptionResolver来定义全局异常处理策略。 您可以使用ExceptionHandler注释控制器 。如果您想在某些情况下特定这可能会很有用。
13使用日志框架
您可能已经意识到这一点但您应该使用Logger进行日志记录而不是使用System.out.println手动执行。这很容易在Spring Boot中完成几乎没有配置。只需获取该类的记录器实例
Logger logger LoggerFactory.getLogger(MyClass.class);
这很重要因为它可以让您根据需要设置不同的日志记录级别。
14测试你的代码
这不是Spring Boot特有的但它需要提醒测试你的代码。如果您没有编写测试那么您将从一开始就编写遗留代码。
如果有其他人来到你的代码库很快就会改变任何东西。当您有多个服务相互依赖时这甚至可能更具风险。
由于存在Spring Boot最佳实践因此您应该考虑将Spring Cloud Contract用于您的消费者驱动合同。它将使您与其他服务的集成更容易使用。
15使用测试切片使您的测试更容易更专注
使用Spring Boot测试代码可能很棘手 - 您需要初始化数据层连接大量服务模拟事物......实际上并不是那么难
答案是 - 使用测试切片。
使用测试切片您可以根据需要仅连接部分应用程序。这可以为您节省大量时间并确保您的测试不会与您未使用的内容相关联。 总结
感谢Spring Boot它使我们编写基于Spring的微服务变得前所未有的简单。希望通过这些最佳实践您的实施过程不仅会很快而且从长远来看也会更加强大和成功。祝您好运