springboot的yaml属性配置文件注入

简介: SpringBoot中默认的从application.properties文件中加载参数我们通常把springboot中资源目录下的application.properties文件改成application.yaml,因为yaml文件更具有层次感。

SpringBoot中默认的从application.properties文件中加载参数

我们通常把springboot中资源目录下的application.properties文件改成application.yaml,因为yaml文件更具有层次感。YAML文档也可以比较好的被支持, YamlPropertiesFactoryBean会将yaml文件当初properties来解析的。

有时候我们会把一些属性写在配置文件yaml中然后调用

使用@value 进行属性的注入

这是我的yaml文件   

写法要注意下:属性名:(空格)属性值    不够IDEA的强大功能会提示你是否写错,很明显吧,没写空格属性名是不会变色的

新建一个测试的controller   仔细看@Value的写法 ("${上一级的属性名.属性名}")

@RestController

public classHelloController {

@Value("${boy.sex}")

private String sex;

@Value("${boy.age}")

private String age;

@GetMapping("/hello")

public String hello(){

return sex+age;

}

测试的结果


上面是直接通过@Value把属性值注入进来,在开发过程中通常不会直接在Controller中注入,通常注入会在实体类entity中

@Component   //用于后面controller的属性注入,声明为一个bean

public  classBoy {

@Value("${boy.sex}")

private String sex;

@Value("${boy.age}")

private String age;

set和get方法...

}

controller:看起来这样写没问题,不会报错

@RestController

public class HelloController {

@Autowired

private Boy boy;

String A=boy.getSex();

String B=boy.getAge();

@GetMapping("/hello")

publicString hello(){

return A+B;

}

运行后控制台报错:

主要错误为Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException:大概意思是Bean通过构造函数实例化嵌套异常,异常名为org.springframework.beans.BeanInstantiationException

怎么改呢

需要把get方法写进方法体内

@RestController

public class HelloController {

@Autowired

private Boy boy;

@GetMapping("/hello")

public String hello(){

String A=boy.getSex();

String B=boy.getAge();

return A+B;

}

再次运行,错误消失,得到我们想要的结果


使用@ConfigurationProperties注解简化

用@Value只要有一个属性就要写一次,但数量多了就会变得很麻烦,用@ConfigurationProperties的话会自动注入,设置要前缀prefix

@Component

@ConfigurationProperties(prefix ="boy")

public  class Boy {

private String sex;

private String age;

set和get方法...

}

注意,实体类的属性名和yaml的属性名要对应相同,不然获取到的值就为null,yaml多余的属性不影响实体类的属性

由于你实体类只有sex和age属性,所以只会注入sex和age

多层次的前缀prefix写法

@ConfigurationProperties(prefix ="human.boy")

只需要上一级的属性.下一级属性,以此类推,最底层属性要实体类entity属性

目录
相关文章
|
17天前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
38 0
|
1月前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
39 0
|
3月前
|
Java
SpringBoot之yaml
SpringBoot之yaml
|
3月前
|
Java 应用服务中间件 容器
SpringBoot之Web原生组件注入
SpringBoot之Web原生组件注入
|
3月前
|
Java C++
SpringBoot中的properties,yml,yaml的区别
SpringBoot中的properties,yml,yaml的区别
32 0
|
4月前
|
Java
SpringBoot注入出现@org.springframework.beans.factory.annotation.Autowired(required=true)
SpringBoot注入出现@org.springframework.beans.factory.annotation.Autowired(required=true)
32 0
|
1月前
|
XML 设计模式 Java
springboot创建并配置环境3 - 配置扩展属性(下)
springboot创建并配置环境3 - 配置扩展属性(下)
springboot创建并配置环境3 - 配置扩展属性(下)
|
1月前
|
XML JSON Java
springboot如何创建并配置环境3 - 配置扩展属性(上)
springboot如何创建并配置环境3 - 配置扩展属性(上)
springboot如何创建并配置环境3 - 配置扩展属性(上)
|
2月前
|
存储 JSON JavaScript
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
"YAML Ain't Markup Language"(简称YAML)是一种专为人类设计的数据序列化语言,适用于多种现代编程语言,可广泛应用于各类日常任务。它是一种以人类可读形式呈现的、适用于多种语言的Unicode数据序列化标准。它基于敏捷编程中常见的本地数据结构,广泛应用于配置文件、互联网消息传递、对象持久化以及数据审计等多个领域。遵循Unicode标准、
101 8
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
QGS
|
3月前
|
JSON Java 关系型数据库
手拉手Springboot获取yml配置文件信息
手拉手Springboot获取yml配置文件信息
QGS
34 1