快捷搜索:  汽车  科技

springboot配置文件原则(springboot配置文件YML注意事项)

springboot配置文件原则(springboot配置文件YML注意事项)@Value("${zzp2.girl.age}")private String name2;在YML中我们再添加一个ZZP2的配置信息,其中包含了girl节点以及girl下的name,age属性和之前一样,我们controller中通过@Value注解来获取属性值,同时创建一个url来输出我们的属性值。@Value("${zzp2.name}")

YML读取注意事项

使用YML时遇到的坑:

最近在做项目时,遇到了一些在读取YML配置时发生的问题,在这里写一并写下来,希望给自己以及大家一个提示,能尽量避免在读取配置文件时发生这些错误,给开发带来不必要的多余时间去处理。

多重层级读取

在YML中我们再添加一个ZZP2的配置信息,其中包含了girl节点以及girl下的name,age属性

springboot配置文件原则(springboot配置文件YML注意事项)(1)

和之前一样,我们controller中通过@Value注解来获取属性值,同时创建一个url来输出我们的属性值。

@Value("${zzp2.name}")

private String name2;

@Value("${zzp2.girl.age}")

private Integer girlAge;

@Value("${zzp2.girl.name}")

private String girlName;

@RequestMapping(value = "/getZzpGirlInfo" method = RequestMethod.GET)

public String getZzpGirlInfo(){

return "zzp2.name:" name2 "\n" "zzp2.girl.age:" girlAge "\n" "zzp2.girl.name:" girlName;

接下来我们通过POSTMAN来访问下,可以看到使用注解@Value没有问题,都可以渠道属性值。

springboot配置文件原则(springboot配置文件YML注意事项)(2)

接下来我们按照之前的思路建立一个Zzp2properties来将配置文件转变为一个实体类进行接收,这个时候问题就来了,我们如何定义girl这个属性呢,我们之前说过,配置文件与实体类的映射是根据属性名一致来相互对应的,可是我们无法命名一个属性为girl.name啊。我想聪明的你应该已经想到了,是的,我们再建立一个实体类Girl来接收girl的参数,其中的属性也是与girl下的参数一一对应。

public class Girl {

private String name;

private String age;

//get set 方法...

}

@Component

@ConfigurationProperties(value = "zzp2")

public class Zzp2Properties {

private String name;

private String height;

private String weight;

private Integer age;

private Girl girl;

@Override

public String toString() {

return "Zzp2Properties{"

"name='" name '\''

" height='" height '\''

" weight='" weight '\''

" age=" age

" girl=" girl

'}';

}

//get set方法...

之后我们再在controller中测试一下

@Autowired private Zzp2Properties zzp2Properties; @RequestMapping(value = "/getZzpGirlInfo2" method = RequestMethod.GET) public Zzp2Properties getZzpGirlInfo2(){ return zzp2Properties; }

可以发现,girl的参数已经被注入进来,可以正常获得了,这里要特别说明的是在ZzpProperties中的属性Girl命名一定是girl,必须要与配置文件中的保持一致。

springboot配置文件原则(springboot配置文件YML注意事项)(3)

static静态属性

在一般开发中,我们经常会做静态属性或是静态块的方法来给我们的config使用,比如我使用jedis时,config中就是使用静态块来创建链接,那在YML中能否将配置信息读进static中呢?很可惜,答案是否定的。

我们首先在application.yml中增加zzp3的配置信息。

zzp3: name: 北坡卡卡 age: 10 height: 105cm weight: 30kg

然后在controller中通过设置静态属性来获取配置信息。

@Value("${zzp3.name}")

private static String name3;

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

private static Integer age3;

@Value("${zzp3.height}")

private static String height3;

@RequestMapping(value = "/getZzp3Info" method = RequestMethod.GET)

public String getZzp3Info(){

return "zzp3.name:" name3 "\n" "zzp3.age:" age3 "\n" "zzp3.name:" name3;

通过POSTMAN的测试,我们发想,属性值都是null,无法得到配置文件参数。

springboot配置文件原则(springboot配置文件YML注意事项)(4)

那是不是我们就无法使用static来获取配置信息来呢?其实并不然,我们可以使用static属性的set方法来获取,我们添加三个参数的set方法,并吧set方法中的static给去掉,同时吧直接@Value置于set方法上。

private static String name3;

private static Integer age3;

private static String height3;

@Value("${zzp3.name}")

public void setName3(String name3) {

Round2Controller.name3 = name3;

}

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

public void setAge3(Integer age3) {

Round2Controller.age3 = age3;

}

@Value("${zzp3.height}")

public void setHeight3(String height3) {

Round2Controller.height3 = height3;

}

我们仍旧通过POSTMAN来访问看下结果,我们发现已经可以获取到值了。

springboot配置文件原则(springboot配置文件YML注意事项)(5)

猜您喜欢: