date: 2019-12-27 09:00:00

updated: 2019-12-30 13:20:00

Spring Boot 学习摘要--关于配置

学习教程来自:B站 尚硅谷

1. 关于配置

1. Yaml

  1. 键值对写法:必须要有空格! k: v

  2. v 的一些写法

    • 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. 测试、生产多配置文件指定

  1. 使用 properties 文件,多 profiles 的形式

    application.properties: 主配置文件

    application-dev.properties: 测试配置文件

    application-prod.properties: 生产配置文件

默认启动的时候会激活主配置文件,切换配置文件时,在主配置文件中添加

spring.profiles.active=dev/prod
  1. 使用 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 的作用:

  1. 利用 AutoConfigurationImportSelector.class 给容器导入一些组件

  2. 通过 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 来打印出自动配置报告,看到哪一类自动配置类启动了哪一些没启动

总结:

  1. xxxAutoConfiguration:自动配置类,给容器添加组件
  2. xxxProperties:封装配置文件中相关属性

Spring Boot 学习摘要--关于配置的更多相关文章

  1. Spring Boot 学习摘要--关于日志框架

    date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...

  2. spring boot 学习(十)SpringBoot配置发送Email

    SpringBoot配置发送Email 引入依赖 在 pom.xml 文件中引入邮件配置: <dependency> <groupId>org.springframework. ...

  3. Spring Boot学习一之配置类及自动配置

    一.配置类 1. 导入其他配置类 你不需要将所有的 @Configuration 放进一个单独的类, @Import 注解可以用来导入其他配置类.另外,你也可以使用 @ComponentScan 注解 ...

  4. Spring Boot 2.0 教程 | 配置 Undertow 容器

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 文章首发于个人网站 https://ww ...

  5. Spring Boot学习大全(入门)

    Spring Boot学习(入门) 1.了解Spring boot Spring boot的官网(https://spring.io),我们需要的一些jar包,配置文件都可以在下载.添置书签后,我自己 ...

  6. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  7. Spring boot学习1 构建微服务:Spring boot 入门篇

    Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  8. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  9. spring boot学习笔记2

    开场知识: spring 容器注入bean,时容器初始化的一些接口以及接口调用的时间先后顺序: 1)BeanFactoryPostProcessor 容器初始化的回调方法 * BeanFactoryP ...

随机推荐

  1. 2.BlockingQueue-阻塞式队列

  2. domReady的理解

    domReady的理解 domReady是名为DOMContentLoaded事件的别称,当初始的HTML文档被完全加载和解析完成之后,DOMContentLoaded事件被触发,而无需等待样式表.图 ...

  3. Bulldog1靶机渗透

    Bulldog1靶机渗透 扫描一下内网存活主机,发现192.168.114.144这个存活主机. 进行端口扫描:23,80,8080端口均开放. 进行网页访问,暂时没有什么发现,扫一下网站的目录. 发 ...

  4. xxe漏洞,及xml

    xxe漏洞 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文 ...

  5. 划重点!AWS的湖仓一体使用哪种数据湖格式进行衔接?

    此前Apache Hudi社区一直有小伙伴询问能否使用Amazon Redshift查询Hudi表,现在它终于来了. 现在您可以使用Amazon Redshift查询Amazon S3 数据湖中Apa ...

  6. jQurey轮播插件slides简单使用教程

    动态演示地址: http://www.zqunyan.com/zgproduction/slidesjs/index.html 简介就不多说了,网上有很多,复制粘贴没意义,会想到用这个插件就代表已经了 ...

  7. Centos-退出抽取设备-eject

    eject 退出抽取设备,如光驱或磁带,如果设备已经挂载,则卸载设备 相关选项 -q 退出磁盘 -r 退出光盘 -d 显示默认设备

  8. GAN的理论 Theory behind GAN

    任务:想要找到一个高维空间中的分布 P_data(x),要在目标类别的区域,采样的概率是高的:在那个区域之外,probability是低的.但这个P_data(x)分布的具体形式(pdf)是不知道的, ...

  9. milvus和faiss安装及其使用教程

    写在前面 高性能向量检索库(milvus & faiss)简介 Milvus和Faiss都是高性能向量检索库,可以让你在海量向量库中快速检索到和目标向量最相似的若干个向量,这里相似度量标准可以 ...

  10. C#入门——Console.Write()与Console.WriteLine()

    参考:https://blog.csdn.net/qujunyao/article/details/72884670 两者区别: Console.Write("abc"); 输出到 ...