SpringBoot配置——yaml配置文件值获取

举报
yd_221104950 发表于 2020/12/03 01:25:53 2020/12/03
4.5k+ 0 0
【摘要】 YAML语法可以参考《YAML文件的基本语法》 application.properties和application.yml都是SpringBoot的配置文件,它们位于src/main/resources目录下,专门用于修改默认配置的。 1、首先在src/main/resources目录下创建application.yml ~/Desktop/MySpringbo...

YAML语法可以参考《YAML文件的基本语法》

application.properties和application.yml都是SpringBoot的配置文件,它们位于src/main/resources目录下,专门用于修改默认配置的。

1、首先在src/main/resources目录下创建application.yml

~/Desktop/MySpringboot$ touch src/main/resources/application.yml

  
 

2、在application.yml中加入以下配置信息

server: port: 8088
person: lastName: Sam age: 18 boss: false birth: 2020/03/21 maps: {k1: v1,k2: v2} lists: - Tom - Sam dog: name: small dog age: 2

  
 

如果用application.properties文件来配置,那么上述数据就等价于:

server.port=8088
person.lastName=Sam
person.age=18
person.boss=false
person.birth=2020/03/21
person.maps.k1=v1
person.maps.k2=v2
person.lists=Tom,Sam
person.dog.name=small dog
person.dog.age=2

  
 

3、创建一个Person类,用于将配置文件中的属性值映射到此类中来

Person.java

package com.wong.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

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

/**
 * 将配置文件中配置的每一个属性值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * prefix = "person":配置文件中哪个下面的所有属性值进行一一映射
 * 	注意:只有这个组件是容器的组件,才能使用容器提供的ConfigurationProperties功能
 */
@Configuration
@ConfigurationProperties(prefix = "person")
public class Person{
	private String lastName;
	private int age;
	private boolean boss;
	private Date birth;

	private Map<String,Object> maps;
	private List<Object> lists;
	private Dog dog;

	// 省略setter、getter方法
}
  
 
  • @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定,prefix = “person”:配置文件中哪个下面的所有属性值进行一一映射。
  • @Configuration用于定义配置类,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
  • Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中

其实我们还可用@Value标注来绑定值:

@Configuration
//@ConfigurationProperties(prefix = "person")
public class Person{
	@Value("${person.lastName}")
	private String lastName;

	@Value("${person.age}")
	private int age; @Value("${person.boss}")
	private boolean boss; @Value("${person.birth}")
	private Date birth; @Value("${person.maps}") // 失败
	private Map<String,Object> maps; @Value("${person.lists}") // 失败
	private List<Object> lists; @Value("${person.dog}") // 失败
	private Dog dog;

	// 省略setter、getter方法
}
  
 

比较一下@Value和@ConfigurationProperties的区别:

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 逐个指定
松散语法 支持,即lastName、last_name、LAST_NAME都会认为是相同的 不支持
SpEL 不支持 支持,见示例1
JSR303数据校验 支持,见示例2 不支持
复杂类型封装 支持 不支持

因此有复杂类型封装或者定义了javaBean来映射配置项,我们就选用@ConfigurationProperties。在单独使用某个属性时,就用@Value。
示例1:

@Configuration
public class Person{
	@Value("#{10*2}")
	private int age; // 省略setter、getter方法
}
  
 

示例2:

@Configuration
@ConfigurationProperties(prefix = "person")
@Validated
public class Person{
	@mail
	private String lastName; // 必须符合邮件格式
	...
}
  
 

4、使用配置信息

@RestController
@RequestMapping("world")
public class HelloWorldController{ @Autowired private Person person; @GetMapping("hi") public String index(){ return person.getLastName(); }
}
  
 

@Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。

5、运行并测试

运行:

~/Desktop/MySpringboot$ mvn spring-boot:run

  
 

在浏览器测试:
在这里插入图片描述

6、单元测试

在src/test/java/com/wong下创建测试类:

package com.wong;

import com.wong.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootConfigTests { @Autowired private Person person; @Test public void testPerson(){ System.out.println(person.getLastName()+"kkkkk"); }

}
  
 

右键SpringBootConfigTests.java,点击RUN 'SpringBootConfigTests’运行测试类:
在这里插入图片描述测试通过。谢谢阅读!

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/105088284

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。