【笔记】Spring Boot 历史官方文档学习(持续更新)

文章目录

    • 前言
    • [1 Spring Boot 1.0](#1 Spring Boot 1.0)
      • [1.1 Spring Boot 1.0 特性 ------ 专属的Spring事件](#1.1 Spring Boot 1.0 特性 —— 专属的Spring事件)
        • [1.1.1 背景](#1.1.1 背景)
        • [1.1.2 原文解读](#1.1.2 原文解读)
      • [1.2 Spring Boot 1.0 特性 ------ 外部化配置](#1.2 Spring Boot 1.0 特性 —— 外部化配置)
        • [1.2.1 背景](#1.2.1 背景)
        • [1.2.2 原文解读](#1.2.2 原文解读)
      • 1.3

前言

Spring Boot 2014正式发布1.0版本,距今已经快10年了。看历史官方文档了解重点feature, 帮助自己建立知识网络。

Spring 5 官网历史文档学习 一样,尽量保证不误解文档作者的原意,不好翻译的会有原文摘录(包括一些专有名词),并辅以自己的理解。限于篇幅原因,只摘录工作中遇到过的或者是有兴趣的。

1 Spring Boot 1.0

1.1 Spring Boot 1.0 特性 ------ 专属的Spring事件

1.1.1 背景

Spring Boot 基础知识,排错或需要拓展Spring Boot的时候要考虑到这个

1.1.2 原文解读

在 ApplicationContext 创建完成之前,会依次发生以下事件:

  • ApplicationStartedEvent ------ 在 listeners 和 initializers 注册完成。
  • ApplicationEnvironmentPreparedEvent ------ 还未创建 context,但是其依赖的 Environment 已知。
  • ApplicationPreparedEvent ------ 在 refresh 之前,bean 定义全部加载完成。
  • ApplicationFailedEvent ------ 启动失败。

实际开发中可能不会用到这些事件,但是Spring Boot借助这些事件完成了许多功能。

You often won't need to use application events, but it can be handy to know that they exist. Internally, Spring Boot uses events to handle a variety of tasks.

1.2 Spring Boot 1.0 特性 ------ 外部化配置

1.2.1 背景

实现一套代码在不同的环境部署。实现外部化配置的方法:

  • properties
  • YAML
  • 环境变量
  • 命令行参数

1.2.2 原文解读

外部化配置的元素还能注入到bean,通过

  • @Value
  • Environment 抽象

PropertySource 读取配置的顺序,数字大的覆盖数字小的

  1. 命令行参数
  2. Java api System.getProperties()
  3. 操作系统环境变量
  4. @Configuration 标注的类,又由 @PropertySource 注入
  5. 外部包下的 application.properties
  6. 内部包下的 application.properties
  7. 默认配置 SpringApplication.setDefaultProperties

实际应用:自己的jar包提供默认实现(自己是个starter),生产项目依赖这个starter,运行生产项目覆盖这个配置

值得注意的是配置文件的读取优先级

  1. 当前目录/config
  2. 当前目录
  3. classpath 中的 /config
  4. classpath 的根目录

Spring Boot 1.0 yml 文件的缺点

  • @PropertySource 没法读到 YAML 的配置

@ConfigurationProperties(name="connection") 的使用

  • 用于简化公共前缀的冗余,与 yml 文件的思路一致

    yml 复制代码
    connection:
    	username: admin
    	remoteAddress: 192.168.1.1
    java 复制代码
    @Component
    @ConfigurationProperties(name="connection")
    public class ConnectionSettings {
    
    	private String username;
    	
    	@NotNull
    	private InetAddress remoteAddress;
    
    	// ... getters and setters
    
    }
  • 支持 JSR-303 @NotNull 校验

1.3

相关推荐
for_ever_love__6 小时前
UI学习:UISearchController基础了解和应用
学习·ui·ios·objective-c
心中有国也有家6 小时前
GE图引擎深度解析——CANN的计算图优化与执行引擎
人工智能·pytorch·python·学习·numpy
来杯@Java7 小时前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
東雪木8 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
GHL2842710908 小时前
换脸工作流学习
学习·ai
_李小白8 小时前
【android opencv学习笔记】Day 28: 滤波算法之中值滤波器
android·opencv·学习
Oll Correct8 小时前
实验二十九:TCP的运输连接管理
网络·笔记
qq_2518364579 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
飞翔中文网10 小时前
Java学习笔记之抽象类与接口(设计思想)
java·笔记·学习
智者知已应修善业10 小时前
【proteus设计文氏正弦波信号发生器】2023-5-9
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程