Spring Boot 2系列(四十三):源码分析 SpringApplication 执行流程
源码分析 SpringApplication 执行流程,深入理解 Spring Boot 应用的启动流程。
本篇分析基于 Spring Boot 2.1.4.RELEASE 版本。
源码分析 SpringApplication 执行流程,深入理解 Spring Boot 应用的启动流程。
本篇分析基于 Spring Boot 2.1.4.RELEASE 版本。
在 SSM 框架中,通常会在 web.xml 中配置编码过滤器 CharacterEncodingFilter,但在 Spring Boot 应用中却没有要求人为配置编码过滤器,是因为 Spring Boot 基于 习惯优于配置 的原则,默认情况下自动配置了编码过滤器,采用的 UTF-8 编码。
本篇分析 Spring Boot 的编码过滤器的自动配置,也更详细的理解和体会 Spring Boot 自动配置的使用。
Spring Boot 的一大特性是基于 习惯优与配置 原则为很多组件提供了 自动配置 ,这个强大的特性可以快速将其它功能整合,个人认为这是促成该框架流行的主要原因,特别适合互联网项目的分布式开发(基于业务的单一职责原则),开发可以将更多精力集中在业务上,而不是配置上。
Spring Boot 都会有一个名为 xxxApplication 的启动类,里面有一个标准的 java 应用的入口 main 方法,用于启动 Spring Boot 应用项目。
@SpringBootApplication 是 Spring Boot 的核心注解,作用在 xxxApplication 的启动类上,SpringBoot 会自动扫描 @SpringBootApplication 所在类的同级包及下级包里的所有 Bean 。
通过 Spring Initializr 或 IDE 支持创建的 Spring Boot 应用的在 groupId + arctifactID 组合的包名下会创建一个 xxxApplication 启动类。
项目需要连接多个数据库时,在不使用数据库中间件的情况下,就需要配置多个数据源,如主从数据库、新旧数据库(结构不一致)。
手头项目新需求需要连接两个数据库,需要配置两个数据源。项目的基本结构是基于 Spring Boot 2.x + Mybatis + Druid + Common Mapper + PageHelper,所以本篇也是在此基础实现多数据源的配置,留个记录。
Spring Boot 在默认情况下,提供了 /error
映射来处理所有错误,在 Servlet 容器里注册了全局的错误页面(Whitelabel Error Page)并返回客户端。
也可以自定义替换默认的异常处理, 通过实现 ErrorController 接口并注册为 Bean;或者添加 ErrorAttributes 类型的 Bean 来替换内容。
通常情况下,都会自定义全局异常统一处理,返回统一的消息结构体,便于了解和快速定位问题,Spring 提供了 @ControllerAdvice 注解,非常好实现。
Spring Boot 官方文档,错误处理:28.1.11 Error Handling
Swagger官方宣称是最好的 API 文档构建工具,也确实好用,易用。Swagger 生成的 API 接口文档是 Restful 风格的,会自动识别传参方式( path , query , body ),参数类型等;会自动识别允许的请求方式,若接口没有限制请求方式,Swagger 则会生成 Restful 风格的所有请求(get、post、put、patch、options、head、delete)。
项目的 API 接口需要更新,需要维护,直接通过 Swagger 工具生成非常的方便,不需要维护一个单独的API文档。单独的 API 文档非常容易出错和遗漏,特别是时间长了修改的人多的情况下,更是难以保证准确性。
发送电子邮件到用户是项目中一个很常见的功能,如邮件通知、邮件营销、通过邮件激活账号、通过邮件找回密码等。
Spring Framework 提供了一个用于发送电子邮件的实用库,保护用户免受底层邮件系统的细节影响。提供了发送电子邮件的简单抽象 JavaMailSender 接口,Spring Boot 为 JavaMail提供了自动配置和启动模块。
Spring Boot 对 Email 的支持官方说明,有关使用 JavaMail 的详细说明,可参阅官方的参考文档, JavaMail 参考实现。
Spring AMQP 默认支持 RabbitMQ 作为 AMQP 协议的实现,因为…RabbitMQ 和 Spring 是同一家软件公司开发的。
Spring Boot 对 RabbitMQ 的支持也是基于 Spring AMQP。为 RabbitMQ 提供了自动配置,可以直接使用rabbitTemplate
,自动开启了消息监听注解@EnableRabbit
。
更多关于消息服务概念和支持的组件可阅读Spring Boot 2实践系列(三十三):JMS 和 AMQP 消息服务及支持的消息组件。
Spring Boot 为 AcitveMQ 提供了自动配置,可以直接使用jmsTemplate
,自动开启了消息监听注解@EnableJms
。
更多关于消息服务概念和支持的组件可阅读Spring Boot 2实践系列(三十三):JMS 和 AMQP 消息服务及支持的消息组件。