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. DRF序列化、认证、跨域问题

    初级 #models.py from django.db import models class User(models.Model): user = models.CharField(max_len ...

  2. 关于消息中间件ActiveMQ的企业级应用

    几个月前看到项目中配置了activeMq,于是想通透的掌握activeMq,便去网上学习搜寻资料,找到这一篇博客挺不错的,解释的比较清楚,包括原理使用和配置,特此把它分享给大家. 众所周知,消息中间件 ...

  3. 基于Java反射的定时任务设计

    一.使用场景 1.不需要立即执行.立即得到结果返回. 2.如果执行失败.需要有失败补偿机制. 3.和业务代码解耦,适用于不同的务场景. 4.调用接口的入参.出参 统计,方便查询. 二.执行顺序 1.业 ...

  4. 为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?

    写在前面 最近,有个小伙伴问我:我在SpringBoot项目中,使用@JsonFormat注解标注LocalDateTime类型的字段时,LocalDateTime反序列化失败,这个我该怎么处理呢?别 ...

  5. 0921 LCA练习

    1.poj 1330 数据结构中的树,在计算机科学中是非常重要的,例如我们来看看下面这棵树: 在图中我们对每个节点都有编号了. 8号节点是这棵树的根.我们定义,一个子节点向它的根节点的路径上,任意一个 ...

  6. CentOS openssh升级到openssh-7.2版本

    查看现在的版本SSH -V 一.准备 备份ssh目录(重要) cp -rf /etc/ssh /etc/ssh.bak [ 可以现场处理的,不用设置 安装telnet,避免ssh升级出现问题,导致无法 ...

  7. sysfs是什么??

    来源:https://blog.csdn.net/qq_36412526/article/details/83751520 第一次接触:sysfs, 这里记录过程: 原文:Documenttation ...

  8. MCU(Micro Control Unit)中文名称为微控制单元

    参考:http://www.elecfans.com/dianzichangshi/mcu.html 什么是mcu_mcu是什么意思 标签:MCU(471)单片机(3098)微控制器(503) MCU ...

  9. matlab中fspecial Create predefined 2-D filter以及中值滤波均值滤波以及高斯滤波

    来源: 1.https://ww2.mathworks.cn/help/images/ref/fspecial.html?searchHighlight=fspecial&s_tid=doc_ ...

  10. 云原生 go-zero 微服务框架

    0. go-zero介绍 go-zero是一个集成了各种工程实践的web和rpc框架.通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验. go-zero包含极简的API定义和生成工具goc ...