关键词:
Spring boot 配置文件和ymal结构
文章目录
源码
上一节
yaml
yaml 简介就不多说了,说白了就是类似json结构,比json更清晰的 kv形式的;通俗易懂。
语法
- k: v ; 冒号后面有一个空格
- 使用空格缩进,表示层级关系,尽量不要使用tab
- 大小写敏感
- 驼峰表示, 如:my-name 表示字段myName
- '#'表示注释
ymal 中的数据结构
- string
普通的value即可。 略
- map, object
key, value 形式;
如:
family:
lover: xiaohong
father: xiaoduFather
或者行内表示:
family: “lover”: “xiaohong”,“father”:“xiaoduFather”
- list
使用 - 表示,或者使用逗号分割;
如:
hobby:
- lol
- ping pong
或者行内表示: hobby: lol,ping pong
也可以带上中括号:hobby: [lol,ping pong]
- date
默认格式为 yyyy/MM/dd; 如 birthday: 2010/01/01 12:00:00,或者 2010/01/01
- null
使用 ~ 表示; 如:age: ~
- 更复杂的对象,可以自行查阅,以上平常开发够用了。
示例
#对象
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文件格式
- 自定义 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;
- @PropertySource 中指定 factory
@ConfigurationProperties(prefix = "person2")
@Component
@PropertySource(value = "classpath:user.yaml", factory = YamlPropertySourceFactory.class)
下一节
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文件以数据为核... 查看详情