SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
来源:互联网 发布:java语法分析器 编辑:程序博客网 时间:2024/06/05 22:31
YML读取注意事项
使用YML时遇到的坑:
最近在做项目时,遇到了一些在读取YML配置时发生的问题,在这里写一并写下来,希望给自己以及大家一个提示,能尽量避免在读取配置文件时发生这些错误,给开发带来不必要的多余时间去处理。
多重层级读取
在YML中我们再添加一个ZZP2的配置信息,其中包含了girl节点以及girl下的name,age属性。
zzp2: name: 西科啦啦 age: 30 height: 175cm weight: 760kg long: 10cm girl: name: Marry.Jean age: 18
和之前一样,我们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没有问题,都可以渠道属性值。
接下来我们按照之前的思路建立一个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中测试一下
@Autowiredprivate Zzp2Properties zzp2Properties;@RequestMapping(value = "/getZzpGirlInfo2",method = RequestMethod.GET) public Zzp2Properties getZzpGirlInfo2(){ return zzp2Properties; }
可以发现,girl的参数已经被注入进来,可以正常获得了,这里要特别说明的是在ZzpProperties中的属性Girl命名一定是girl,必须要与配置文件中的保持一致。
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,无法得到配置文件参数。
那是不是我们就无法使用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来访问看下结果,我们发现已经可以获取到值了。
开发环境切换
上次我们说到切换开发环境,但并没有演示,我们这次来试一下,创建application-dev.yml其中将zzp3的配置信息更换下,然后在application.yml中指定使用dev的参数给项目使用。
#application-dev.ymlzzp3: name: 西莫纳纳 age: 99 height: 95cm weight: 90kg#application.ymlspring: profiles: active: dev
我们通过POSTMAN可以发现,zzp3的信息已经是使用的dev的参数了。
通常我们在开发中,重复的配置信息不会重复写,也就是说在application.yml定义好的配置信息就不要在application-dev.yml再定义一次,我们只需要指定使用哪个环境的配置文件即可。因为重复的进行配置会有许多意想不到的问题,比如之前我在使用xml进行mybatis的sql配置,但是每次访问数据库都会有‘没有绑定的sql语句错误’。之后我们在聊mybatis连接数据库时我们再详细的说下这个问题。
今天就先写到这吧~~~
所有的代码我已经上传到GitHub
round1-springboot
如果心急的小伙伴也可以去clone我已经完成的项目,这个项目中把一些常用功能都写了,并且都写注释啦!!!
MySpringBoot
- SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
- SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
- 使用SpringBoot yml配置文件(三)
- 使用SpringBoot yml配置文件(三)
- SpringBoot(三):SpringBoot 属性配置文件详解
- SpringBoot .yml配置文件
- SpringBoot配置文件application.yml (application.properties)
- SpringBoot开发详解(二)--SpringBoot的配置文件以及注解
- springboot yml
- SpringBoot学习记录3------外部配置文件yml
- SpringBoot 热部署 和 yml类型配置文件
- springboot开发(yml配置和注解解析)
- springboot学习总结系列(一):多环境下(开发环境,生产环境)使用yml 或 properties 配置文件
- SpringBoot开发详解(一)--初识SpringBoot
- springboot(三)配置文件
- SpringBoot(二):配置文件详解
- SpringBoot yml 配置
- SpringBoot yml 配置
- 经典查找算法 --- B-树
- 贪心——HDU 4572
- innodb undo --update undo log补充2
- MPU6050姿态结算(采用硬件I2C实现数据融合算法)
- Eddy的难题
- SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
- 判断java源文件名称
- java面向对象思想编程
- 在oc中如何利用反射机制
- Python中的字符串
- 【luogu 3410】拍照
- BZOJ 1263: [SCOI2006]整数划分 数学,高精度
- RBF神经网络与BP神经网络的比较
- IMWeb小白十天-Day2