美文网首页
springboot配置文件值注入

springboot配置文件值注入

作者: Triste花刺 | 来源:发表于2018-06-05 23:46 被阅读0次

    使用@ConfigurationProperties注解

    配置文件

    person:
      #注入普通属性
      lastName: zhangsan
      age: 18
      birth: 1995/07/09
      boss: true
      #map
      maps: {key1: v1, key2: v2}
      #list
      lists: [1,2,a,b]
      #对象
      dog:
        name: xiaohua
        age: 3
    

    javabean

    package com.xun.springboot_config.bean;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @program:
     * @description:
     * @author: 寻。
     * @create: 2018-06-05 22:32
     **/
    
    /**
     * 将配置文件中的每一个属性的值映射到这个组件这种
     * @ConfigurationProperties:告诉springboot将本类中的所有属性和配置文件进行绑定
     * prefix = "person" 指定配置文件中哪个下面的属性进行映射
     *
     * 只有这个组件是容器中的组件,才能提供@ConfigurationProperties功能
     */
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
    
        private String lastName;
        private Integer age;
        private Date birth;
        private boolean boss;
    
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    
        get set toString方法省略。。。
    }
    
    package com.xun.springboot_config.bean;
    
    /**
     * @program:
     * @description:
     * @author: 寻。
     * @create: 2018-06-05 22:35
     **/
    public class Dog {
    
        private String name;
        private Integer age;
        get set toString方法省略。。。
    }
    

    使用springboot测试方法进行测试

    package com.xun.springboot_config;
    
    import com.xun.springboot_config.bean.Person;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootConfigApplicationTests {
    
        @Autowired
        Person person;
        @Test
        public void contextLoads() {
            System.out.println(person);
        }
    
    }
    

    测试结果:
    Person{lastName='zhangsan', age=18, birth=Sun Jul 09 00:00:00 CST 1995, boss=true, maps={key1=v1, key2=v2}, lists=[1, 2, a, b], dog=Dog{name='xiaohua', age=3}}

    使用@Value注解注入

    @Component
    public class Person {
        //只支持简单类型封装
        @Value("${person.lastName}")
        private String lastName;
        private Integer age;
        private Date birth;
        private boolean boss;
    
        //不支持复杂类型封装
        @Value("${person.maps}")
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    }
    

    两者对比

    如果说我们只是在某个业务中需要获取一下配置文件中的某项值,使用@Value;
    例如:

    package com.xun.springboot_config.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @program:
     * @description:
     * @author: 寻。
     * @create: 2018-06-05 23:36
     **/
    @RestController
    public class HelloController {
    
        @Value("${person.lastName}")
        private String name;
    
        @RequestMapping("hello")
        public String sayHello(){
            return "hello "+name;
        }
    
    }
    

    结果就是:hello zhangsan
    如果专门编写了一个javabean来和配置文件进行映射,我们就直接使用@ConfigurationProperties(并且这个注解支持参数校验)

    相关文章

      网友评论

          本文标题:springboot配置文件值注入

          本文链接:https://www.haomeiwen.com/subject/vmhvsftx.html