springboot配置文件读取和yaml结构(代码片段)

xiaoduup xiaoduup     2022-12-11     332

关键词:

Spring boot 配置文件和ymal结构

文章目录

源码

源码链接地址:

上一节

Spring boot Banner和icon

yaml

 yaml 简介就不多说了,说白了就是类似json结构,比json更清晰的 kv形式的;通俗易懂。

语法

  1. k: v ; 冒号后面有一个空格
  2. 使用空格缩进,表示层级关系,尽量不要使用tab
  3. 大小写敏感
  4. 驼峰表示, 如:my-name 表示字段myName
  5. '#'表示注释

ymal 中的数据结构

  1. string

普通的value即可。 略

  1. map, object

key, value 形式;
如:
family:
lover: xiaohong
father: xiaoduFather
或者行内表示:
family: “lover”: “xiaohong”,“father”:“xiaoduFather”

  1. list

使用 - 表示,或者使用逗号分割;
如:
hobby:
- lol
- ping pong
或者行内表示: hobby: lol,ping pong
也可以带上中括号:hobby: [lol,ping pong]

  1. date

默认格式为 yyyy/MM/dd; 如 birthday: 2010/01/01 12:00:00,或者 2010/01/01

  1. null

使用 ~ 表示; 如:age: ~

  1. 更复杂的对象,可以自行查阅,以上平常开发够用了。

示例

#对象
person:
 # string
  name: xiaodu 
   # null
  age: ~
   #date
  birthday: 200/01/01 12:00:00
  # 集合
  hobby: # 行内表示[lol,ping pong] 
    - lol
    - ping pong
   # map
  family: # 行内表示"lover": "xiaohong","father":"xiaoduFather" 
    lover: xiaohong
    father: xiaoduFather

Sprinsg boot 配置文件

根据profiles 读取不同的配置文件

在resources下我们创建4个配置文件, dev 开发; test 测试, prod 生产;
使用 application-env.yml 形式命名文件名称


application.yml
使用spring.profiles.active 指定配置文件

spring:
 profiles:
   active: dev

application-dev.yml, application-test.yml, application-prod.yml 分别指定不同的端口;

#dev
server:
 port: 8081
 #test
 server:
 port: 8082
 #prod
 server:
 port: 8083

当在application.yml中使用spring.profiles.active指定配置文件后,就会加载相应的配置文件信息;有助于我们根据不同的环境切换信息/
也可以在一个配置文件中进行profile的分区; 使用 三个- 进行分区

#application.yml
spring:
 profiles:
   active: test1

---
spring:
 profiles: dev1
server:
 port: 8991
---
spring:
 profiles: test1
server:
 port: 8992
---
spring:
 profiles: prod1
server:
 port: 8993

获取配置信息

配置文件信息

person:
name: xiaodu
age: ~
birthday: 200/01/01 12:00:00
hobby: #[lol,ping pong]
 - lol
 - ping pong
family: #"lover": "xiaohong","father":"xiaoduFather"
 lover: xiaohong
 father: xiaoduFather

通过注解获取配置文件信息

@value 获取配置信息
使用 $key:default 进行获取配置文件信息; 也可以通过# 使用SPEL 表达式进行表示和运算;冒号面跟默认值

   @Value("$person.name:xiaodu")
   private String name;

   @Value("$person.age")
   private Integer age;
   
// 使用# 进行计算;
//    @Value("#'$person.hobby'.split(',')")
   private String[] hobbys;
   
// 还可以使用dateTimeFormat 进行日期的格式化
//    @DateTimeFormat(pattern = "yyyy-MM-dd")
   @Value("$person.birthday")
   private Date birthday;

@ConfigurationProperties获取配置信息
推荐使用此方式

直接通过属性映射给配置类信息;配置类必须被spring管理;也就是一个spring bean;
推荐是使用 @EnableConfigurationProperties(UserProperties.class) 进行; 直接在类上使用@component 也可以。

//prefix 代表前缀
@ConfigurationProperties(prefix = "person")
/*
属性名称相同,直接映射; 大小写,如“ user.my-age  映射  实体属性  myAge
*/
  private String name;
// 接收日期;可以指定格式化; 默认 yyyy/MM/dd
//    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    private List<String> hobby;

    private Integer age;
//  接收map
    private Map<String, String> family;

@PropertySource指定资源位置

   @PropertySource 配合@ConfigurationProperties 进行指定配置文件的位置; 
   @PropertySource 不能使用通配符,只能使用精确的位置; 
   可以使用 classpath, file, url 对资源进行具体的protocol 指定;也可以通过$ 获取配置信息指定的位置
  • classpath
@ConfigurationProperties(prefix = "person1")
@Component
@PropertySource("classpath:user.properties")
  • file
@ConfigurationProperties(prefix = "person1")
@Component
@PropertySource("file:/path/to/file.proerties")
  • url
@Component
@PropertySource("url:$myConfig.url/config/fruits/price")
@ConfigurationProperties(prefix = "fruits")

url会进行网络请求指定路径获取配置信息;
例如下面模拟了一个接口的返回值,返回的是一个 properties 文件格式的字符串。
通过url指定该路径。

@RestController
@RequestMapping("/config")
public class PropertiesController 

    @GetMapping("/fruits/price")
    public String fruitsPrice() 
        return "fruits.apple=1.2/kg\\nfruits.banana=1.5/kg";
    


默认@PropertySource 指定资源位置后,使用properties 后缀的文件信息,若想使用则需要配置yaml解析
使用@propertySource 配置使用yaml
指定yamlpropertysource 的解析; DefaultPropertySourceFactory 是springboot 提供的默认的,只支持kv形式的properties文件格式

  1. 自定义 yamlPropertySourceFactory
public class YamlPropertySourceFactory extends DefaultPropertySourceFactory 

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException 
        String filename = resource.getResource().getFilename();
        String sourceName = Optional.ofNullable(name).orElse(resource.getResource().getFilename());
        if (!resource.getResource().exists()) 
            return new PropertiesPropertySource(sourceName, new Properties());
        
        if (filename.endsWith(".yaml") || filename.endsWith(".yml")) 
            YamlPropertiesFactoryBean yamlPropertiesFactoryBean = yamlPropertiesFactoryBean(resource);
            return new PropertiesPropertySource(sourceName, yamlPropertiesFactoryBean.getObject());
        
        return super.createPropertySource(name, resource);
    

    public YamlPropertiesFactoryBean yamlPropertiesFactoryBean(EncodedResource encodedResource) 
        YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
        yamlPropertiesFactoryBean.setResources(encodedResource.getResource());
        yamlPropertiesFactoryBean.afterPropertiesSet();
        return yamlPropertiesFactoryBean;
    

  1. @PropertySource 中指定 factory
@ConfigurationProperties(prefix = "person2")
@Component
@PropertySource(value = "classpath:user.yaml", factory = YamlPropertySourceFactory.class)

下一节

Spring boot logging

springboot04_配置文件三种读取配置文件方式(代码片段)

文章目录①.yaml配置文件②.读取配置的三种方式①.yaml配置文件①.YAML全称是YAMLAintMarkupLanguage。YAML是一种直观能够被电脑识别的数据数据序列化格式,并且容易被人阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言... 查看详情

springboot-yaml配置注入

一、yaml语法①配置文件SpringBoot使用一个全局的配置文件,配置文件名称是固定的application.properties语法结构:key=valueapplication.yml语法结构:key:空格value配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给... 查看详情

springboot03:yaml配置解析

配置文件SpringBoot使用一个全局的配置文件,配置文件名称是固定的application.properties语法结构:key=valueapplication.yml语法结构:key:空格value配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好... 查看详情

springboot的yaml语法

配置文件SpringBoot使用一个全局的配置文件,配置文件名称是固定的application.properties语法结构:key=valueapplication.yml语法结构:key:空格value配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好... 查看详情

springboot----四yaml配置注入(代码片段)

四、yaml配置注入4.1、配置文件SpringBoot使用一个全局的配置文件,配置文件名称是固定的application.properties语法结构:key=valueapplication.yml语法结构:key:空格value配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底... 查看详情

springboot项目中propertysource读取yaml配置文件(代码片段)

  springboot项目中,当我们使用@Value注解读取配置属性,默认的配置文件是properties类型文件,如果一些配置来自yaml格式配置文件,那么就需要做一个配置。PropertySource注解提供了factory属性,可以设置yaml格... 查看详情

Spring Boot 无法从配置文件特定的 yaml 文件中读取

】SpringBoot无法从配置文件特定的yaml文件中读取【英文标题】:Springbootunabletoreadfromprofilespecificyamlfile【发布时间】:2018-03-0506:15:34【问题描述】:我在玩springboot并试图创建一个配置文件特定的配置文件。我叫它application-local.yml... 查看详情

springboot:properties和yaml配置文件

一、配置文件的生效顺序,会对值进行覆盖1.@TestPropertySource注解2.命令行参数3.Java系统属性(System.getProperties())4.操作系统环境变量5.只有在random.*里包含的属性会产生一个RandomValuePropertySource6.在打包的jar外的应用程序配置文件(... 查看详情

springboot配置文件读取-configfileapplicationlistener

...读取应用的配置文件并add到Environment的PropertySources列表里Springboot应用在启动的时候准备好了环境后就会触发ApplicationEnvironmentPreparedEvent事件就开始执行读取配置的逻辑:首先加载当前激活的Profile列表然后从默认的classpath:/,classpath:/... 查看详情

springbootlogging(代码片段)

Springbootlogging文章目录Springbootlogging源码上一节Springboot配置文件读取和yaml结构springboot启动日志自定义logging1.配置文件中设置日志参数springboot对logback中的扩展支持控制台日志颜色输出下一节Springbootcrud和swagger使用源码源码链接htt... 查看详情

面试官:啥是yaml?和springboot有啥关系?

...结构、各种配置文件等。YAML的配置文件后缀为.yml,例如Springboot项目中使用到的配置文件application.yml。标量标量是最基础的数据类型,不可再分的值,他们一般用于表示单个的变量,有以下七种:这样,我们就可以在程序中引入... 查看详情

手把手带你yaml快速入门

...本语言的配置文件)都习惯使用JSON的方式来完成,包括Springboot的出现目的也是在一定程度上去掉XML的繁琐配置。在Springboot中,推荐使用properties或者YAML文件来完成配置,但是对于较复杂的数据结构来说,YAML又远远优于properties... 查看详情

一步一步教你yaml快速入门

...本语言的配置文件)都习惯使用JSON的方式来完成,包括Springboot的出现目的也是在一定程度上去掉XML的繁琐配置。在Springboot中,推荐使用properties或者YAML文件来完成配置,但是对于较复杂的数据结构来说,YAML又远远优于properties... 查看详情

c#开发的openra的yaml文件读取和分析

...赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。YAML的配置文件后缀为.yml,如:runoob.yml。基本语法大小写敏感使用缩进表示层级关... 查看详情

c#开发的openra的yaml文件读取和分析

...赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。YAML的配置文件后缀为.yml,如:runoob.yml。基本语法大小写敏感使用缩进表示层级关... 查看详情

springboot2配置文件application.yaml(代码片段)

源码基于SpringBoot2.4.41、认识配置文件1.1配置文件的加载创建SpringBoot项目的时候,会自动创建一个application.properties文件,该文件是SpringBoot默认的配置文件。SpringBoot在启动的时候会默认去寻找并加载application.properties文件和applicati... 查看详情

python配置文件管理之ini和yaml文件读取(代码片段)

...系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。良好的配置管理应允许在任何环境中执行软件而不更改代码。最常见的配置包括数据库认证配置、部署服务器的主机名、动态参数等。在本文中,我想与大家分... 查看详情

springboot中yaml文件配置属性

参考技术A首先,在SpringBoot中,有两种配置文件的方式。一种是application.properties,另一种application.yaml(或者是application.yml)。yaml文件格式是SpringBoot支持的一种JSON超集文件格式,相对于传统的Properties配置文件,yaml文件以数据为核... 查看详情