yml文件使用

yml文件使用

yml文件是springboot推荐使用的配置文件格式,它相较于propertites格式文件更强大,比如可以实现SpEl表达式、松散绑定等等。

yml文件格式

1.key,value格式

k: v //注意冒号后面要跟空格
demo-key: v //松散绑定,对应对象属性demoKey
  1. list格式
k:
	- v1
	- v2
k: [v1,v2] //行内写法
  1. map格式
k: {k1: v1,k2: v2}
  1. 占位符
k: ${random.uuid} //生成uuid
k: ${random.int} //生成随机数
k: ${demo.placeholder:default} //如果demo.placeholder存在则使用demo.placeholder的值,否则使用默认值

使用

在java项目中的resources目录下创建application.yml文件

person:
  id: ${random.uuid}
  name: 小强
  first-name: xiaoQiang
  age: ${random.int}
  hobby:
    - 篮球
    - 足球
    - 乒乓球
  grade: {a: 80,b: 90,c: 95}
  remark: ${person.placeholder:default}备注
  dog:
    name: 旺财

使用方式一(@ConfigurationProperties)

创建对应的实体类
Person.java

package com.example.configuration;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Data
@Component
@ConfigurationProperties(prefix = "person") //将person前缀的配置映射到对象属性
public class Person {
    private String id;
    private String name;
    private String firstName;
    private Integer age;
    private List<String> hobby;
    private Map<String,String> grade;
    private Dog dog;
    private String remark;
}

Dog.java

package com.example.configuration;

import lombok.Data;

@Data
public class Dog {
    private String name;
}

创建测试类

@SpringBootTest
class ApplicationTests {
	@Resource
	private Person person;
		@Test
	void testConfig(){
		System.out.println(person);
	}
}

执行测试方法,返回执行结果如下:

Person(id=0d1e376c-3b62-4213-b4ea-82bf85978f53, name=小强, firstName=xiaoQiang, age=-393568359, hobby=[篮球, 足球, 乒乓球], grade={a=80, b=90, c=95}, dog=Dog(name=旺财), remark=default备注)

从上面的执行结果可以看出所有的配置都已经注入到对应的对象属性中,非常方便。
当然除了以上的方法进行属性注入外,还可以单独注入某一个属性值。

使用方式二(@Value)

我们将Dog类修改一下

package com.example.configuration;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class Dog {
    @Value("${person.dog.name}")
    private String name;
}

创建测试类

@SpringBootTest
class ApplicationTests {
	@Resource
	private Dog dog;
	
	@Test
	void testConfig(){
		System.out.println(dog);
	}
}

执行结果如下

Dog(name=旺财)

可以看到@Value注解可以将配置赋值到对象属性。
说到@Value我们还可以指定配置文件进行配置,下面也来演示一下:
添加配置文件demo.properties

dogName=旺财123

修改Dog.java

package com.example.configuration;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Data
@Component
@PropertySource(value = "classpath:demo.properties")  //加载指定的配置文件
public class Dog {
    @Value("${dogName}")
    private String name;
}

执行测试方法,结果可能会如下出现乱码,那么就要设置IDEA的配置文件格式为UTF-8

Dog(name=旺财123)

修改配置settings–>File Encodings
在这里插入图片描述
修改完成后执行测试方法,得到如下结果:

Dog(name=旺财123)

JSR303数据校验

yaml 文件还支持JSR303数据校验,使用此功能需要引入数据校验的starter

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>

修改配置文件

person:
  id: ${random.uuid}
  name: //将姓名删除
  first-name: xiaoQiang
  age: ${random.int}
  hobby:
    - 篮球
    - 足球
    - 乒乓球
  grade: {a: 80,b: 90,c: 95}
  remark: ${person.placeholder:default}备注
  dog:
    name: 旺财

Person.java文件做如下修改

package com.example.configuration;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;

@Data
@Validated
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String id;
    @NotBlank(message = "姓名不能为空")
    private String name;
    private String firstName;
    private Integer age;
    private List<String> hobby;
    private Map<String,String> grade;
    private Dog dog;
    private String remark;
}

执行测试方法,此时会出现如下报错,说明数据校验生效了,有了数据校验我们可以有效减少关键配置修改出错的可能性。

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'person' to com.example.configuration.Person failed:

    Property: person.name
    Value: 
    Origin: class path resource [application.yml]:47:8
    Reason: 姓名不能为空

总结

从以上的demo中我们可以看到yml格式文件相较与properties配置文件,功能更加强大,所以我们在做springboot项目开发的时候还是优先考虑使用yml格式配置文件。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: application.properties 文件使用的是标准的键值对格式,而 application.yml 文件使用的是 YAML 格式,它支持更多的数据类型,比如列表和映射,并且可以更加简洁地表达出来。 ### 回答2: springboot中的 application.properties 文件和 application.yml 文件都是用来配置应用程序的属性的。 application.properties 文件使用键值对的形式进行配置的,每个属性和对应的值之间使用等号(=)进行分隔,不同的属性之间使用回车换行进行分隔。例如: ```properties server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 ``` application.yml 文件采用的是YAML(YAML Ain't Markup Language)格式,一种以数据为中心的文本格式来进行配置。YAML 使用缩进和缩进的方式来表示不同的层级关系,使用冒号(:)来分隔属性和对应的值。例如: ```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: 123456 ``` 在配置方式上,YAML 相对于 properties 更加简洁和易读,可以使用缩进来表示层级结构,给人更加直观的感受。 另外,YAML 还提供了更多的数据结构支持,比如列表、映射等,可以让配置更加灵活。同时,YAML 还支持引用、继承等高级特性,可以更好地实现配置的复用和组织。 总的来说,使用 application.properties 和 application.yml 都可以实现配置应用程序的需求,但在简洁性和可读性上,YAML 更加优秀一些。根据个人习惯和团队约定,可以选择使用其中之一。 ### 回答3: springboot的application.properties文件和application.yml文件都是用来配置springboot应用程序的属性文件。它们的主要区别在于文件格式和书写风格。 application.properties文件是常见的Java属性文件格式,采用键值对的方式进行配置,类似于传统的.properties文件。在该文件中,每一行代表一个属性配置,以"="分隔键和值。例如: ```properties server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb ``` 相比之下,application.yml文件采用了更加人性化的YAML(YAML Ain't Markup Language)格式。YAML是一种简洁高效的数据序列化语言,具有可读性强、结构清晰等特点。在该文件中,使用缩进表示层级关系,以冒号":"分隔键值对。例如: ```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/mydb ``` 除了格式上的不同,两者在书写风格上也有一些区别。使用properties文件时,如果多个配置项属于同一级别,需要使用相同前缀来区分,例如"spring.datasource.username"和"spring.datasource.password";而在yml文件中,可以直接使用缩进的方式表示层级关系。 虽然两者在格式和书写风格上存在差异,但实际上它们都可以达到相同的配置效果。开发者可以根据实际需求和自己的偏好选择使用哪种文件格式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值