阅读本文大概需要 7 分钟。
来自:www.e4developer.com/2018/08/06/
1、使用自定义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>
<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-oriented_design)#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基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅