yaml注入配置文件

yaml注入配置文件

  • 1、在springboot项目中的resources目录下新建一个文件 application.yml
  • 2、编写一个实体类 Dog;
@Component  //注册bean到容器中
public class Dog {
    private String name;
    private Integer age;
    
    //有参无参构造、get、set方法、toString()方法  
}

  • 3、我们原来给bean注入属性值是使用@Value,给Dog类测试一下:

@Component //注册bean
public class Dog {
    @Value("小白")
    private String name;
    @Value("18")
    private Integer age;
}
  • 4、在SpringBoot的测试类下注入狗狗输出一下;
@SpringBootTest
class SpringBootYaml01ApplicationTests {
    @Autowired//自动注入实体类
    private Dog dog;
    @Test
    void contextLoads() {
        System.out.println(dog);//打印对象
    }

}

结果成功输出,@Value注入成功,这是我们原来的办法对吧。
在这里插入图片描述

  • 5 .我们在编写一个复杂一点的实体类:person类
@Component//注册bean到容器里面
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
/*写好有参无参构造,get()set() 方法以及toString()方法*/
  • 6、使用yaml配置的方式进行注入
person:
  name: 小白
  age: 19
  happy: true
  birth: 2020/1/1
  maps: {k1: v1,k2: v2}
  lists:
    -code
    -dog
    -cat
  dog:
    name: 小黄
    age: 2

  • 7、我们刚才已经把person这个对象的所有值都写好了,我们现在来注入到我们的类中!
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

会出现爆红:
在这里插入图片描述
解决方法:导入依赖


<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>
  • 9、确认以上配置都OK之后,我们去测试类中测试一下:
@SpringBootTest
class DemoApplicationTests {

    @Autowired
    Person person; //将person自动注入进来

    @Test
    public void contextLoads() {
        System.out.println(person); //打印person信息
    }

}

测试成功
在这里插入图片描述

拓展

  • 加载指定的配置文件

@PropertySource :加载指定的配置文件;

@configurationProperties:默认从全局配置文件中获取值;

1、我们去在resources目录下新建一个person.properties文件

name=honghong

2、然后在我们的代码中指定加载person.properties文件

@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {

    @Value("${name}")
    private String name;

    ......  
}

测试:
在这里插入图片描述

  • 配置文件占位符

配置文件还可以编写占位符生成随机数

person:
  name: 小白${random.uuid}
  age: ${random.int}
  happy: true
  birth: 2020/1/1
  maps: {k1: v1,k2: v2}
  lists:
    -code
    -dog
    -cat
  dog:
    name: 小黄_${person.age}
    age: 2

【注意】properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;

settings–>FileEncodings 中配置;
在这里插入图片描述

properties与yaml对比小结:

1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下

3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

4、复杂类型封装,yml中可以封装对象 , 使用value就不支持

结论:

配置yml和配置properties都可以获取到值 , 强烈推荐 yml;

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;

如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值