spring注入yml和properties中配置

基本类型+字符串

配置文件yml

configInt: 1
configShort: 1
configLong: 1
configDouble: 1.0
configFloat: 1.0
configBoolean: true
configChar: 1
configByte: 1
configString: "configString"

java

@Component
public class TestConfig {
    @Value("${configInt}")
    int configInt;
    @Value("${configShort}")
    short configShort;
    @Value("${configLong}")
    long configLong;
    @Value("${configDouble}")
    double configDouble;
    @Value("${configFloat}")
    float configFloat;
    @Value("${configBoolean}")
    boolean configBoolean;
    @Value("${configChar}")
    char configChar;
    @Value("${configByte}")
    byte configByte;
    @Value("${configString}")
    String configString;

    @PostConstruct
    void test(){
        System.out.println("configInt: " + configInt);
        System.out.println("configShort: " + configShort);
        System.out.println("configLong: " + configLong);
        System.out.println("configDouble: " + configDouble);
        System.out.println("configFloat: " + configFloat);
        System.out.println("configBoolean: " + configBoolean);
        System.out.println("configChar: " + configChar);
        System.out.println("configByte: " + configByte);
        System.out.println("configString: " + configString);
    }
}

结果

set和list一样

这边以set为例

set<String>

方式一

set1: 111,222,333
@Component
public class TestConfig {
    @Value("${set1}")
    private Set<String> set1;
    @PostConstruct
    void test(){
        System.out.println(set1);
    }
}

 

方式二

set:
  set2:
    - 1111
    - 2222
    - 3333
@Component
@ConfigurationProperties(prefix = "set")
public class TestConfig {
    @Setter
    private Set<String> set2;
    @PostConstruct
    void test(){
        System.out.println(set2);
    }
}

 

set<List>

set:
  set3:
    - 1,2,3,4,5
    - 3,4,5,6
    - 5,6,7
@Component
@ConfigurationProperties(prefix = "set")
public class TestConfig {
    @Setter
    private Set<List<String>> set3;

    @PostConstruct
    void test(){
        System.out.println(set3);
    }
}

 set<Map>

set:
  set4:
    - key1: value1
      key2: value2
      key3: value3
    - key4: value4
      key5: value5
      key6: value6
@Component
@ConfigurationProperties(prefix = "set")
public class TestConfig {
    @Setter
    private Set<Map<String,String>> set4;
    @PostConstruct
    void test(){

        System.out.println(set4);
    }
}

set<Stu> 

Stu是自定义对象

@Data
public class Stu {
    String name;
    Integer age;
}
set:
  set5:
    - name: 张三
      age: 11
    - name: 李四
      age: 25
@Component
@ConfigurationProperties(prefix = "set")
public class TestConfig {
    @Setter
    private Set<Stu> set5;

    @PostConstruct
    void test(){

        System.out.println(set5);
    }
}

map

Map<String,String>

方式一

map:
  map1:
    - key: zhangsan
      value: 11
    - key: lisi
      value: 22
@Component
@ConfigurationProperties(prefix = "map")
public class TestConfig {
    @Setter
    private Map<String,String> map1;
    @PostConstruct
    void test(){
        System.out.println(map1);
    }
}

这样写key和value前面会有索引id

方式二 

map:
  map1:
    zhangsan: 11
    lisi: 22
@Component
@ConfigurationProperties(prefix = "map")
public class TestConfig {
    @Setter
    private Map<String,String> map1;
    @PostConstruct
    void test(){
        System.out.println(map1);
    }
}

Map<String,List<String>>

方式一

map:
  map1:
    zhangsan: 11,22,33
    lisi: 111,222,333
@Component
@ConfigurationProperties(prefix = "map")
public class TestConfig {
    @Setter
    private Map<String,List<String>> map1;
    @PostConstruct
    void test(){
        System.out.println(map1);
    }
}

方式二 

map:
  map1:
    zhangsan:
      - 11
      - 22
      - 33
    lisi:
      - 111
      - 222
      - 333
@Component
@ConfigurationProperties(prefix = "map")
public class TestConfig {
    @Setter
    private Map<String,List<String>> map1;
    @PostConstruct
    void test(){
        System.out.println(map1);
    }
}

Map<String,Stu>

Stu是自定义对象

@Data
public class Stu {
    String name;
    Integer age;
}
map:
  map1:
    zhangsan:
      name: 张三
      age: 11
    lisi:
      name: 李四
      age: 22
@Component
@ConfigurationProperties(prefix = "map")
public class TestConfig {
    @Setter
    private Map<String,Stu> map1;
    @PostConstruct
    void test(){
        System.out.println(map1);
    }
}

 

对象中值注入

object:
  name: 张三
  gender: 男
  stu:
    name: stu
    age: 11
  list:
    - name: list张三
      age: 11
    - name: list李四
      age: 22
  map:
    zhangsan:
      name: map张三
      age: 11
    lisi:
      name: map李四
      age: 22
@Component
@ConfigurationProperties(prefix = "object")
public class TestConfig {
    @Setter
    String name;
    @Setter
    String gender;
    @Setter
    Stu stu;
    @Setter
    List<Stu> list;

    @Setter
    private Map<String,Stu> map;
    @PostConstruct
    void test(){
        System.out.println("name:"+name);
        System.out.println("gender"+gender);
        System.out.println("stu"+stu);
        System.out.println("list"+list);
        System.out.println("map"+map);
    }
}

总结 

遇到简单类型都可以直接使用@Value("${name}")取值

遇到复杂的,如list,set,map,自定义对象都建议使用

@ConfigurationProperties(prefix = "object")加setter方法

注意使用@ConfigurationProperties(prefix = "object")时,prefix不能有大写字母,否则会报错,建议使用-替换大写为小写,如userInfo=>>>user-info

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 13:08:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 13:08:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 13:08:04       82 阅读
  4. Python语言-面向对象

    2024-03-29 13:08:04       91 阅读

热门阅读

  1. C++原创2D我的世界1.00.3 QPBSv01测试版

    2024-03-29 13:08:04       32 阅读
  2. python 之 常见错误信息

    2024-03-29 13:08:04       42 阅读
  3. pytorch中torch.stack()用法虽简单,但不好理解

    2024-03-29 13:08:04       36 阅读
  4. FFMPEG C++封装(二)

    2024-03-29 13:08:04       33 阅读
  5. 深入理解与实战CSS变量

    2024-03-29 13:08:04       44 阅读
  6. Chapter 4 of Effective C++ (设计与声明)

    2024-03-29 13:08:04       38 阅读