美文网首页
Spring Boot配置绑定

Spring Boot配置绑定

作者: 小安静子 | 来源:发表于2022-03-23 23:27 被阅读0次

    最近在做项目,发现springboot是一个好框架,是java的。如果要做测试开发,仅仅只熟悉python是远远不够的。来看看这个框架有什么优点:

    1. 快速构建项目
    2. 对主流开发框架的无配置集成
    3. 项目可独立运行,无需外部依赖 Servlet 容器
    4. 提供运行时的应用监控
    5. 极大地提高了开发、部署效率
    6. 与云计算的天然集成

    OK, 开干。环境处理就不说了,很容易搜到的。
    @ConfigurationProperties
    通过 Spring Boot 提供的 @ConfigurationProperties 注解,可以将全局配置文件中的配置数据绑定到 JavaBean 中。下面我们以 Spring Boot 项目 helloworld 为例,演示如何通过 @ConfigurationProperties 注解进行配置绑定。

    1. 在 helloworld 的全局配置文件 application.yml 中添加以下自定义属性。
    person:
      lastName: 张三
      age: 18
      boss: false
      birth: 1990/12/12
      maps: { k1: v1,k2: 12 }
      lists:
        ‐ lisi
        ‐ zhaoliu
      dog:
        name: 迪迪
        age: 5
    

    在工程下建一个person的类

    package com.example.demo;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 将配置文件中配置的每一个属性的值,映射到这个组件中
     *
     * @ConfigurationProperties:告诉 SpringBoot 将本类中的所有属性和配置文件中相关的配置进行绑定;
     * prefix = "person":配置文件中哪个下面的所有属性进行一一映射
     *
     * 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;
     */
    
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
        private Map<String, Object> maps;
        private List<Object> list;
    
        public Person() {
    
        }
       public String getLastName(){
            return lastName;
       }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Boolean getBoss() {
            return boss;
        }
    
        public void setBoss(Boolean boss) {
            this.boss = boss;
        }
    
        public Date getBirth() {
            return birth;
        }
    
        public void setBirth(Date birth) {
            this.birth = birth;
        }
    
        public Map<String, Object> getMaps() {
            return maps;
        }
    
        public void setMaps(Map<String, Object> maps) {
            this.maps = maps;
        }
    
        public List<Object> getList() {
            return list;
        }
    
        public void setList(List<Object> list) {
            this.list = list;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                '}';
        }
    }
    

    注意:
    只有在容器中的组件,才会拥有 SpringBoot 提供的强大功能。如果我们想要使用 @ConfigurationProperties 注解进行配置绑定,那么首先就要保证该对 JavaBean 对象在 IoC 容器中,所以需要用到 @Component 注解来添加组件到容器中。
    JavaBean 上使用了注解 @ConfigurationProperties(prefix = "person") ,它表示将这个 JavaBean 中的所有属性与配置文件中以“person”为前缀的配置进行绑定.

    然后建一个control

    package com.example.demo;
    
    import com.example.demo.Person;
    
    import org.springframework.beans.factory.annotation.Autowire;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class helloControl {
        @Autowired
        private Person person;
    
        @ResponseBody
        @RequestMapping("/hello")
        public Person hello() {
            return person;
    
        }
    }
    
    

    启动项目,使用浏览器访问 “http://localhost:8081/hello”,就大功告成了。
    @Value
    当我们只需要读取配置文件中的某一个配置时,可以通过 @Value 注解获取。

    1. 以 Spring Boot 项目 helloworld 为例,修改实体类 Person 中的代码,使用 @Value 注解进行配置绑定,代码如下。
    package net.biancheng.www.bean;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    @Component
    public class Person {
        @Value("${person.lastName}")
        private String lastName;
        @Value("${person.age}")
        private Integer age;
        @Value("${person.boss}")
        private Boolean boss;
        @Value("${person.birth}")
        private Date birth;
        private Map<String, Object> maps;
        private List<Object> lists;
    

    @Value 与 @ConfigurationProperties 对比
    @Value 和 @ConfigurationProperties 注解都能读取配置文件中的属性值并绑定到 JavaBean 中,但两者存在以下不同。

    1. 使用位置不同
      @ConfigurationProperties:标注在 JavaBean 的类名上;
      @Value:标注在 JavaBean 的属性上。
    2. 功能不同
      @ConfigurationProperties:用于批量绑定配置文件中的配置;
      @Value:只能一个一个的指定需要绑定的配置。
    3. 松散绑定支持不同
      @ConfigurationProperties:支持松散绑定(松散语法),例如实体类 Person 中有一个属性为 lastName,那么配置文件中的属性名支持以下写法:
      person.firstName
      person.first-name
      person.first_name
      PERSON_FIRST_NAME

    @Vaule:不支持松散绑定。

    相关文章

      网友评论

          本文标题:Spring Boot配置绑定

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