分享

@ConfigurationProperties的简单用法

 昵称70680357 2020-07-02

经常在项目中看到@ConfigurationProperties,这里就对@ConfigurationProperties的基本用法做一个简单小结

测试代码

MyConfigurationProperties

项目为SpringBoot项目,在Postman中调/showValue即可看到结果。本文中例子都是基于properties文件。

package com.example.configuration;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.Set;

@ConfigurationProperties(prefix = "com.demo")
@Component
public class MyConfigurationProperties {

    public String myString;
    public int myInt;
    public boolean myBoolean;
    public char myChar;

    public List<String> myList;
    public Set<String> mySet;
    public Map<String, String> myMap;

    public Student student;

    public List<Student> myStudentList;
    public Set<Student> myStudentSet;
    public Map<String, Student> myStudentMap;
    
    // getter setter 省略

}

IndexController:测试类

package com.example.configuration;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

    @Autowired
    public MyConfigurationProperties myConfigurationProperties;

    @RequestMapping("/showValue")
    public MyConfigurationProperties showValue() {
        return myConfigurationProperties;
    }
}

Student:一个简单实体类

package com.example.configuration;

public class Student {

    public String name;
    public int age;
    public Boolean boy;

    // getter setter 省略
    
}

测试结果

测试结果与下文对应

{
    "myString": "Hello World",
    "myInt": 2020,
    "myBoolean": true,
    "myChar": "t",
    "myList": [
        "list5",
        "list4",
        "list3",
        "list2",
        "list1",
        "list1"
    ],
    "mySet": [
        "set1",
        "set2",
        "set3",
        "set4",
        "set5"
    ],
    "myMap": {
        "k1": "v1",
        "k2": "v2",
        "k3": "v3"
    },
    "student": {
        "name": "Han Meimei",
        "age": 18,
        "boy": false
    },
    "myStudentList": [
        {
            "name": "LiLei",
            "age": 20,
            "boy": true
        },
        {
            "name": "Han Meimei",
            "age": 18,
            "boy": false
        }
    ],
    "myStudentSet": [
        {
            "name": "LiLei",
            "age": 20,
            "boy": true
        },
        {
            "name": "LiLei",
            "age": 20,
            "boy": true
        },
        {
            "name": "Han Meimei",
            "age": 20,
            "boy": false
        }
    ],
    "myStudentMap": {
        "boy": {
            "name": "LiLei",
            "age": 20,
            "boy": true
        },
        "girl": {
            "name": "Han Meimei",
            "age": 18,
            "boy": false
        }
    }
}

基本属性

com.demo.my-string=Hello World
com.demo.my-int=2020
com.demo.my-boolean=true
com.demo.my-char=t

String的List,Set,Map

com.demo.my-list=list5,list4,list3,list2,list1,list1
com.demo.my-set=set1,set2,set3,set4,set5,set5
com.demo.my-map.k1=v1
com.demo.my-map.k2=v2
com.demo.my-map.k3=v3

这里我看网上好多写法都是下面这样,个人观点除非value中有逗号否则真的没有必要

语言 方法
2757 Bm3UV
762dS
  • 抖音美女网红「Amazing甜甜」爆红经验分享
  • 3802 2008.11.15 04-43-59
    com.demo.my-list[0]=list0
    com.demo.my-list[1]=list1
    com.demo.my-set[0]=set0
    com.demo.my-set[1]=set1
    

    注意:Set中如果有重复的值,只会保存一次,上面两种用法都是

    一般实体类

    com.demo.student.name=Han Meimei
    com.demo.student.age=18
    com.demo.student.boy=false
    

    实体类的List,Set,Map

    com.demo.my-student-list[0].name=LiLei
    com.demo.my-student-list[0].age=20
    com.demo.my-student-list[0].boy=true
    com.demo.my-student-list[1].name=Han Meimei
    com.demo.my-student-list[1].age=18
    com.demo.my-student-list[1].boy=false
    
    com.demo.my-student-set[0].name=LiLei
    com.demo.my-student-set[0].age=20
    com.demo.my-student-set[0].boy=true
    com.demo.my-student-set[1].name=LiLei
    com.demo.my-student-set[1].age=20
    com.demo.my-student-set[1].boy=true
    com.demo.my-student-set[2].name=Han Meimei
    com.demo.my-student-set[2].age=20
    com.demo.my-student-set[2].boy=false
    
    com.demo.my-student-map.boy.name=LiLei
    com.demo.my-student-map.boy.age=20
    com.demo.my-student-map.boy.boy=true
    com.demo.my-student-map.girl.name=Han Meimei
    com.demo.my-student-map.girl.age=18
    com.demo.my-student-map.girl.boy=false
    

    注意:这里面set[0]set[1]的实体类属性都是一样的, 但在上面的测试结果中,李雷还是返回了2次,这和String的Set是不一样的

    总结

    其实也没有什么好总结的,com.demo是前缀,那么前缀之后紧接的一级key就是Java类中的变量名,再在代码中看这个变量的类型或者看之前的人怎么用的,很快就能知道用法了。

    附:完整的properties文件

    com.demo.my-string=Hello World
    com.demo.my-int=2020
    com.demo.my-boolean=true
    com.demo.my-char=t
    
    com.demo.my-list=list5,list4,list3,list2,list1,list1
    com.demo.my-set=set1,set2,set3,set4,set5,set5
    com.demo.my-map.k1=v1
    com.demo.my-map.k2=v2
    com.demo.my-map.k3=v3
    
    com.demo.student.name=Han Meimei
    com.demo.student.age=18
    com.demo.student.boy=false
    
    com.demo.my-student-list[0].name=LiLei
    com.demo.my-student-list[0].age=20
    com.demo.my-student-list[0].boy=true
    com.demo.my-student-list[1].name=Han Meimei
    com.demo.my-student-list[1].age=18
    com.demo.my-student-list[1].boy=false
    
    com.demo.my-student-set[0].name=LiLei
    com.demo.my-student-set[0].age=20
    com.demo.my-student-set[0].boy=true
    com.demo.my-student-set[1].name=LiLei
    com.demo.my-student-set[1].age=20
    com.demo.my-student-set[1].boy=true
    com.demo.my-student-set[2].name=Han Meimei
    com.demo.my-student-set[2].age=20
    com.demo.my-student-set[2].boy=false
    
    com.demo.my-student-map.boy.name=LiLei
    com.demo.my-student-map.boy.age=20
    com.demo.my-student-map.boy.boy=true
    com.demo.my-student-map.girl.name=Han Meimei
    com.demo.my-student-map.girl.age=18
    com.demo.my-student-map.girl.boy=false
    

    附:完整的yaml文件

    com:
      demo:
        my-boolean: true
        my-char: t
        my-int: 2020
        my-list: list5,list4,list3,list2,list1,list1
        my-map:
          k1: v1
          k2: v2
          k3: v3
        my-set: set1,set2,set3,set4,set5,set5
        my-string: Hello World
        my-student-list:
        - age: 20
          boy: true
          name: LiLei
        - age: 18
          boy: false
          name: Han Meimei
        my-student-map:
          boy:
            age: 20
            boy: true
            name: LiLei
          girl:
            age: 18
            boy: false
            name: Han Meimei
        my-student-set:
        - age: 20
          boy: true
          name: LiLei
        - age: 20
          boy: true
          name: LiLei
        - age: 20
          boy: false
          name: Han Meimei
        student:
          age: 18
          boy: false
          name: Han Meimei
    

    还是觉得properties文件比较好懂

      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多