Spring Boot 2系列(五十三):Spring Boot 配置外部化

Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。可以使用 properties 文件、YAML文件、环境变量和命令行参数将配置外部化。

属性值可以通过@Value注解直接注入到 Bean 的属性,通过 Spring 的 Environment 抽象访问,或者通过@ConfigurationProperties 绑定到结构化对象。

之前写过 Spring Boot 配置的相关文件,但不完整。本篇基于官方文档(Externalized Configuration)行详细描述。

阅读更多

Spring Boot 2系列(五十一):状态设计模式实现简单的工作流

做软件开发的,经常会碰到流程性的业务需求,最常见的是工作流类型的需求。例如审批流程,下单支付流程。每个节点的每个状态分别由有相应权限的角色人处理。

实现流程性业务需求,通常会使用工作流引擎或使用状态流的方式来实现。常见的开源的工作流引擎有 ActivityFlowable

阅读更多

Spring Boot 2系列(五十):Spring AOP 实现动态数据源切换

项目可能会有多个数据源,例如读写分离至少有两个数据库,或一个主库多个从库,或一个系统里面不同业务拆分有各自的数据库,在使用时需要确定使用正确的数据源。

Spring 多数据源实现方式大概有2种,一种是新建多个 MapperScan 扫描不同 Mapper 包,另一种是继承 AbstractRoutingDataSource 实现动态路由。

本篇是基于 Spring AOP 实现数据源动态路由,多个 MapperScan 扫描不同的 Mapper 包的方式可参考 Spring Boot 2实践系列(三十九):Spring Boot 2.x + Mybatis + Druid + Common Mapper 配置多数据源

阅读更多

Spring Boot 2系列(四十九):Spring AOP 实现统一记录请求和响应日志,解密并重设置请求入参值

在实际开发中,可能需要打印方法的入参和返回的数据以帮助出现问题时可快递定位.

常规的做法在方法中的业务处理之前使用 Logger 打印方法入参,在业务处理之后打印结果数据,这样就会在很多方法中存在重复代码。

像打印日志这类跨多个业务和模块的需求,可以通过 Spring AOP 来统一实现,完全省略了方法中手动添加 Logger 的操作。

阅读更多

Spring Boot 2系列(四十八):Spring AOP详解与应用

Aspect-oriented Programming (AOP:面向切面编程) 提供另一种思考程序结构的方式来补充(增强) 面向对象编程(OOP)。

OOP 中模块化的关键单元是类,倾向于采用封装、继承、多态等概念,将一个个的功能在对象中来实现。而在 AOP 中模块化的单元是 切面,切面使关注点(例如事务管理)模块化,可以跨越多种类型和对象。

Spring AOP 框架是 Spring 的核心组件之一。Spring IoC 容器不依赖于 AOP,但 AOP 是对 Spring IoC 的补充,以提供功能强大的中间件解决方案。

阅读更多

Spring Boot 2系列(四十七):Spring AOP 实现API接口处理请求耗时监控

本篇文章算是 Spring Boot 2实践系列(四十六):API接口请求限制之AOP与拦截器实现 的下篇,也是基于拦截器和 AOP 两种方式实现对 API 接口请求响应的耗时进行统计,也是对涉及的知识点学习和巩固。

开发任何一个系统,都应当对 API 接口响应时长进行监控以了解系统性能,帮助判断性能瓶颈(当然很多小公司或小系统并没有这个意识,或有这个意识但没有落地实行)。

阅读更多

Spring Boot 2系列(四十五):RestTemplate 源码分析与自定义请求和拦截器

Saas 项目分布式微服务架构,服务调用使用的是 RestTemplate,并且对 RestTemplate 的 Request 请求进行了自定义,做个记录。

自定义 Request 有很多作用。例如自定义请求实现安全认证,自定义请求拦截器实现负载均衡或请求代理等,可以非常灵活的做些定制化。

RestTemplate 相关文章:Spring Boot 2实践系列(二十一):RestTemplate 远程调用 REST 服务Spring Cloud系列(四):客户端负载均衡 Ribbon

阅读更多