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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值