SpringBoot配置——yaml配置文件值获取
【摘要】 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)