Springboot读取自定义配置文件节点
为了方便自己查找资料使用和对将要使用的朋友起到便捷作用;
· @Value标记读取(默认可直接读取application.yml的节点)
· 实体映射application.yml的节点
· 实体映射自定义配置文件的节点
· 实体映射多层级节点的值
@Value标记读取(默认可直接读取application.yml的节点)
首先在默认application.yml配置文件中自定义如下节点信息:
1 shenniu:
2 name: 神牛003
然后通过@Value标记来直接获取属性值,为了更好的展示数据到界面上定义了一个/conf/name接口:
1 @Value("${shenniu.name}")
2 private String name;
3
4 @GetMapping("/conf/defname")
5 public String getDefName() {
6 return this.name;
7 }
|
运行后效果如:
实体映射application.yml的节点
要用实体类映射出默认配置文件值,仅仅只需要加一个属性名称前缀就行了,当然这仅仅针对于application.yml默认文件里面的属性:
1 @Configuration
2 @ConfigurationProperties(prefix = "shenniu")
3 public class ShenniuConf {
4
5 private String name;
6
7 public String getName() {
8 return name;
9 }
10
11 public void setName(String name) {
12 this.name = name;
13 }
14
15 private Url url;
16
17 public Url getUrl() {
18 return url;
19 }
20
21 public void setUrl(Url url) {
22 this.url = url;
23 }
24
25 private String des;
26
27 public String getDes() {
28 return des;
29 }
30
31 public void setDes(String des) {
32 this.des = des;
33 }
34
35 public static class Url {
36
37 private String blogurl;
38
39 public String getBlogurl() {
40 return blogurl;
41 }
42
43 public void setBlogurl(String blogurl) {
44 this.blogurl = blogurl;
45 }
46
47 }
48 }
|
实体类我多增加了几个属性,为了后面测试方便;要对application.yml做配置映射只需要加上 @ConfigurationProperties(prefix = "shenniu") 标记,prefix的值对应自定义配置文件属性的前缀;这里增加/conf/name接口输出映射出对象的值:
1 @Autowired
2 private ShenniuConf shenniuConf;
3
4 @GetMapping("/conf/name")
5 public String getName() {
6 return shenniuConf.getName();
7 }
|
同样得到了和@Values注解一样的效果,这就表示实体和配置文件自定义属性匹配成功了,主要实体属性名称应该和配置文件节点名称保持一致;
实体映射自定义配置文件的节点
读取application.yml中属性值很简单,有时候需要自定义自己的配置文件,如这里我的my.properties,文件内容如下:
1 shenniu.des=我爱祖国
2 shenniu.url.blogurl=http://www.a.com
|
映射的实体还是用上面的,不过实体上需要增加注解 @PropertySource("classpath:my.properties") 表示自定义文件源,并且同样需要prefix来指定节点前缀;我们增加如下展示接口:
1 @Autowired
2 private ShenniuConf shenniuConf;
3
4 @GetMapping("/conf/des")
5 public String getDes() {
6 return shenniuConf.getDes();
7 }
|
实体映射多层级节点的值
通常自定义配置节点都有层级关系,那我们实体有怎么来获取到不同层级的属性值呢,事实上只需要在实体类里面通过类层级关系来表示就行了,如上面ShenniuConf实体里面的Url实体类属性;
这里添加一个测试接口:
1 @Autowired
2 private ShenniuConf shenniuConf;
3
4 @GetMapping("/conf/myconf")
5 public ShenniuConf getBlogurl() {
6 return shenniuConf;
7 }
|
不出意外能得到如下结果: