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 ...
随机推荐
- C# NX二次开发环境搭建
在网上看到一篇C#二次开发环境搭建的文章:NX二次开发-使用NXOPEN C#手工搭建开发环境配置 ,写得非常好.我按照文章操作,过程中遇到几个问题,把问题分享给大家,希望对各位有帮助. 注意三点: ...
- 从GitHub建站迁移到服务器(Java环境)
一.购买域名和服务器 域名:阿里云:lookabc.cn 服务器:腾讯云,学生价格便宜 二.域名解析 注意:由于域名和服务器不在同一家,需要域名迁入和迁出 三.搭建服务器环境 1.下载xftp6和xs ...
- Istio 运维实战系列(3):让人头大的『无头服务』-下
本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 失败的 Eur ...
- 单元测试框架怎么搭?快来看看新版Junit5的这些神奇之处吧!
为什么使用JUnit5 JUnit4被广泛使用,但是许多场景下使用起来语法较为繁琐,JUnit5中支持lambda表达式,语法简单且代码不冗余. JUnit5易扩展,包容性强,可以接入其他的测试引擎. ...
- Centos-显示或修改系统时间与日期-date
date 显示或者修改系统时间与日期,只有超级用户才能用date命令设置和修改时间,普通用户只能显示时间 相关参数 -s 设置设置时间,格式为 Y-m-d H:M:S -d 对日期进行运算, + ...
- Python-判断字符串是否以某个字符串开头或结尾?
案例: 某文件系统目录下有一系列文件: 1.c 2.py 3.java 4.sh 5.cpp ...... 编写一个程序,给其中所有的.sh文件和.py文件加上可执行权限 如何解决这个问题? 1. 先 ...
- Mysql中 int(3) 类型的含义
注意:这里的(3)代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的. 其实当我们在选择使用int的类型 ...
- 【Python】数据结构
列表的更多特性 list.append(x) 在列表的末尾添加一个元素.相当于 a[len(a):] = [x] . list.extend(iterable) 使用可迭代对象中的所有元素来扩展列表. ...
- Java中类型判断的几种方式
1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...
- SCOI 2008 【奖励关】
早上的考试一道都做不出,被教做人,心态爆炸ing...... 题目描述: 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必 ...