点击上方 Java后端,选择 设为星标
优质文章,及时送达
Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验和一些熟知的Spring Boot专家的文章。
在本文中,我将重点介绍Spring Boot特有的实践(大多数时候,也适用于Spring项目)。以下依次列出了最佳实践,排名不分先后。
欢迎胖友在文末留言,分享你的 Spring Boot 的最佳实践。
1、使用自定义BOM来维护第三方依赖
这条实践是我根据实际项目中的经历总结出的。
Spring Boot项目本身使用和集成了大量的开源项目,它帮助我们维护了这些第三方依赖。但是也有一部分在实际项目使用中并没有包括进来,这就需要我们在项目中自己维护版本。如果在一个大型的项目中,包括了很多未开发模块,那么维护起来就非常的繁琐。
怎么办呢?事实上,Spring IO Platform就是做的这个事情,它本身就是Spring Boot的子项目,同时维护了其他第三方开源库。我们可以借鉴Spring IO Platform来编写自己的基础项目platform-bom,所有的业务模块项目应该以BOM的方式引入。这样在升级第三方依赖时,就只需要升级这一个依赖的版本而已。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Cairo-SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、使用自动配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
如果你想与MongoDB进行集成,需要这样:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
https://dzone.com/articles/what-is-jar-hell
@EnableAutoConfiguration(exclude = {ClassNotToAutoconfigure.class})
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html。
3、使用Spring Initializr来开始一个新的Spring Boot项目
这一条最佳实践来自Josh Long (Spring Advocate,@starbuxman)。
https://start.spring.io/
4、考虑为常见的组织问题创建自己的自动配置
5、正确设计代码目录结构
6、保持@Controller的简洁和专注
https://en.wikipedia.org/wiki/GRASP(object-orienteddesign)#Controller
-
控制器应该是无状态的!默认情况下,控制器是单例,并且任何状态都可能导致大量问题;
-
控制器不应该执行业务逻辑,而是依赖委托;
-
控制器应该处理应用程序的HTTP层,这不应该传递给服务;
-
控制器应该围绕用例/业务能力来设计。
7、围绕业务功能构建@Service
AccountService
,
UserService
,
PaymentService
这样的服务,比起像
DatabaseService
、
ValidationService
、
CalculationService
这样的会更合适一些。
8、使数据库独立于核心业务逻辑之外
罗伯特C.马丁强烈地说明,你的数据库是一个“细节”,这意味着不将你的应用程序与特定数据库耦合。过去很少有人会切换数据库,我注意到,使用Spring Boot和现代微服务开发会让事情变得更快。
9、保持业务逻辑不受Spring Boot代码的影响
10、推荐使用构造函数注入
@Autowired
注解在构造函数上是可选的,而且还可以在没有Spring的情况下轻松实例化bean。
11、熟悉并发模型
https://www.e4developer.com/2018/03/30/introduction-to-concurrency-in-spring-boot/
12、加强配置管理的外部化
-
使用配置服务器,例如Spring Cloud Config;
-
将所有配置存储在环境变量中(可以基于git仓库进行配置)。
13、提供全局异常处理
-
你应该使用HandlerExceptionResolver定义全局异常处理策略;
-
你也可以在控制器上添加@ExceptionHandler注解,这在某些特定场景下使用可能会很有用。
https://www.baeldung.com/exception-handling-for-rest-with-spring
14、使用日志框架
Logger logger = LoggerFactory.getLogger(MyClass.class);
15、测试你的代码
16、使用测试切片让测试更容易,并且更专注
https://spring.io/blog/2016/08/30/custom-test-slice-with-spring-boot-1-4
总结
如果看到这里,说明你喜欢这篇文章,请转发、点赞
。同时标星(置顶)本公众号可以第一时间接受到博文推送。
本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。