SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项

转载自:https://blog.csdn.net/qq_31001665/article/details/70197543#commentBox

一、多重层级读取

在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中测试一下

@Autowired
private 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.yml
zzp3:
  name: 西莫纳纳
  age: 99
  height: 95cm
  weight: 90kg
#application.yml
spring:
  profiles:
    active: dev

我们通过POSTMAN可以发现,zzp3的信息已经是使用的dev的参数了。 

通常我们在开发中,重复的配置信息不会重复写,也就是说在application.yml定义好的配置信息就不要在application-dev.yml再定义一次,我们只需要指定使用哪个环境的配置文件即可。因为重复的进行配置会有许多意想不到的问题,比如之前我在使用xml进行mybatis的sql配置,但是每次访问数据库都会有‘没有绑定的sql语句错误’。之后我们在聊mybatis连接数据库时我们再详细的说下这个问题。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值