Spring Boot 学习摘要--关于配置
date: 2019-12-27 09:00:00
updated: 2019-12-30 13:20:00
Spring Boot 学习摘要--关于配置
学习教程来自:B站 尚硅谷
1. 关于配置
1. Yaml
键值对写法:必须要有空格!
k: vv 的一些写法
- v 是对象
friends:
name: zhangsan
age: 20 行内写法:
friends: {name: zhangsan, age: 20}
- v 是数组
pets:
- cat
- dog 行内写法:
pets: [cat,dog]
2. properties 文件
默认编码是 utf-8 编码,在获取其中的中文时可能有问题,需要修改一下设置
在 settings -> File Encodings 中勾选 “Transparent native-to-ascii conversion”
3. 获取配置中的值
@ConfigurationProperties@ConfigurationProperties(prefix = "?")告诉 SpringBoot 将本类中的所有属性和篇日志文件中相关的配置进行绑定参数 prefix 指定配置文件中某一个 key 下的所有属性进行一一映射
@Value@Value使用 $ 来获取配置中的值,或者使用 # 来实时计算@Value("${person.last-name}")
private String name;
@Value("#{11*2}")
private int age;
| xxx | @ConfigurationProperties | @Value |
|---|---|---|
| 功能 | 批量注入配置文件中的属性 | 一个个指定 |
| 松散绑定 | 支持 | 不支持 |
| SpEL | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂类型封装 eg:map | 支持 | 不支持 |
- 松散绑定:lastName / last-name / last_name 都可以识别成 lastName
- SpEL:#{11*2} 这种方式
- JSR303数据校验:在类上加入注解
@Validated,在变量前加入注解比如@Email,可以自动识别是否符合邮箱格式
如果只是简单获取一下配置的值,就用@Value
4. @PropertySource 和 @ImportResource
- @PropertySource:加载指定的配置文件,在配置类上添加
@PropertySource(value={"classpath:person.properties"})
- @ImportResource:导入指定的配置文件,在启动类上添加
@ImportResource(locations={"classpath:xxx.xml"})
5. 配置文件占位符
#name: zhangsan
age: ${random.int} # 随机数
pet: ${name:zs}_dog # 获取前面 key 为 name 的值,如果没有,用默认值 zs 代替
6. 测试、生产多配置文件指定
- 使用 properties 文件,多 profiles 的形式
application.properties: 主配置文件
application-dev.properties: 测试配置文件
application-prod.properties: 生产配置文件
默认启动的时候会激活主配置文件,切换配置文件时,在主配置文件中添加
spring.profiles.active=dev/prod
- 使用 yml 文件,多文档块的形式
appication.yml 使用 --- 三个横线可以在一个文件中添加多个文档块,相当于编写了好几个文档
server:
port: 8081
spring:
profiles:
active:dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: prod
7. 配置文件目录
- file:/config/ -> 项目根目录/config/
- file:/ ->项目根目录
- classpath:/config/ -> resources/config/
- classpath:/ -> resources
优先级由高到低;相同配置项以高优先级的配置为主;互补配置(会全部加载)
8. 自动配置原理
Spring Boot 启动时加载主配置类,开启自动配置功能 @EnableAutoConfiguration
@EnableAutoConfiguration 的作用:
利用
AutoConfigurationImportSelector.class给容器导入一些组件通过
selectImports()方法来确定哪一些配置被导入
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
// 扫描所有 jar 包类路径下的 META-INF/spring.factories
// 把扫描到的文件内容包装成properties对象
// 从properties中获取到EnableAutoConfiguration.class类对应的值,添加到容器中
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
=>
将类路径 META-INF/spring.factories 下配置的所有 EnableAutoConfiguration.class 的值加入到容器中
eg: xxxAutoConfiguration.class 每一个这样的类都是容器中的一个组件,加入到容器后,再用他们来做自动配置
能配置的属性都来源于 xxxAutoConfiguration.class 类对应的 xxxProperties.class 类
在 xxxProperties.class 类前会有很多注解,比如 @ConditionalOnWebApplication 用来判断是否是一个web应用,如果是返回true,下面的内容才生效,等等注解。即自动配置类是需要在一定条件下才能生效
可以通过在 application.properties 文件中添加 debug=true 来打印出自动配置报告,看到哪一类自动配置类启动了哪一些没启动
总结:
- xxxAutoConfiguration:自动配置类,给容器添加组件
- xxxProperties:封装配置文件中相关属性
Spring Boot 学习摘要--关于配置的更多相关文章
- Spring Boot 学习摘要--关于日志框架
date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...
- spring boot 学习(十)SpringBoot配置发送Email
SpringBoot配置发送Email 引入依赖 在 pom.xml 文件中引入邮件配置: <dependency> <groupId>org.springframework. ...
- Spring Boot学习一之配置类及自动配置
一.配置类 1. 导入其他配置类 你不需要将所有的 @Configuration 放进一个单独的类, @Import 注解可以用来导入其他配置类.另外,你也可以使用 @ComponentScan 注解 ...
- Spring Boot 2.0 教程 | 配置 Undertow 容器
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 文章首发于个人网站 https://ww ...
- Spring Boot学习大全(入门)
Spring Boot学习(入门) 1.了解Spring boot Spring boot的官网(https://spring.io),我们需要的一些jar包,配置文件都可以在下载.添置书签后,我自己 ...
- Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客
==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...
- Spring boot学习1 构建微服务:Spring boot 入门篇
Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- Spring Boot学习笔记2——基本使用之最佳实践[z]
前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...
- spring boot学习笔记2
开场知识: spring 容器注入bean,时容器初始化的一些接口以及接口调用的时间先后顺序: 1)BeanFactoryPostProcessor 容器初始化的回调方法 * BeanFactoryP ...
随机推荐
- Hadoop学习笔记(一):ubuntu虚拟机下的hadoop伪分布式集群搭建
hadoop百度百科:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin hadoop官网:http://hadoop.apache.org/ ...
- 并发编程(八)Lock锁
一.引言 线程并发的过程中,肯定会设计到一个变量共享的概念,那么我们在多线程运行过程中,怎么保证每个先拿获取的变量信息都是最新且有序的呢?这一篇我们来专门学习一下Lock锁. 我们先来了解几个概念: ...
- IoC基础篇(一)--- Spring容器中Bean的生命周期
日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此 ...
- 一分钟理解Redo Undo
数据库中有一种特殊的"日志文件"叫 Redo(重做) Undo(撤销),传统意义上的日志文件是记录系统运行状态的,主要用于系统工程师或者程序员排错.而 Reod/Undo 文件是数 ...
- ✅Vue选择图像
下载 Vue选择图像Vue选择图像 Vue 2.用于从列表中选择图像的组件 演示 https://mazipan.github.io/vue-select-image/ 安装 #纱 纱添加vue-se ...
- 开始在Windows上开发Android
介绍 鉴于您正在阅读这篇文章,您很可能已经知道android是什么了.可能.在科幻小说和电影中,机器人本质上是具有拟人化特征的机器人.还记得<星球大战>里的C-3PO吗?那<星际迷航 ...
- ubuntu1804 snort base
1.环境准备 apt安装 sudo apt-get update -y sudo apt-get dist-upgrade -y sudo apt-get install -y zlib1g-dev ...
- MonkeyRunner+Python自动化测试一
MonkeyRunner介绍 1.monkeyrunner 工具提供了一个 API,用于编写可从 Android 代码外部控制 Android 设备或模拟器的程序.使用 monkeyrunner,您可 ...
- jsoncpp笔记
Json Json是一种轻量级数据交换格式,可以表示数字,字符串,布尔值,null,数组,键值对: { "encoding" : "UTF-8", " ...
- 【C语言/C++编程学习笔记】:通俗易懂讲解 - 链表!学不会?不存在的!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...