spring boot 从application配置文件中读取变量

spring boot 从application配置文件中读取变量

常见的application配置文件有yml,properties两种,本文会详细介绍两种配置文件的读取方法

环境信息:

  • spring boot 2.1.8
  • 依赖lombok (偷懒不写getter,setter)

properties类型配置文件

yml类型往下翻

配置文件信息:

test.name=wayne
test.age=3

一、读取简单变量

1.使用@Value注解

实体类:

@Data
@Component
public class Man {
    @Value("${test.name}")
    //如果想设置默认值可以用下面的写法
    //@Value("${test.name:tom}") ==》当name读不到值时就会赋值tom
    //@Value("tome") ==》 直接给name赋值tom
    private String name;
    @Value("${test.age}")
    private String age;
}

测试类:

    @Autowired
    Man man;

    @Test
    public void contextLoads() {
        System.out.println("Value");
        System.out.println("man.name==>"+man.getName());
        System.out.println("man.age==>"+man.getAge());
    }

输出结果:

Value
man.name==>wayne
man.age==>3

2.使用Environment

可以直接通过Environment对象获取配置文件值

测试类:

    @Autowired
    Environment environment;

    @Test
    public void contextLoads() {
        System.out.println("Environment");
        System.out.println("man.name==>"+environment.getProperty("test.name"));
        System.out.println("man.age==>"+environment.getProperty("test.age"));
    }

测试结果:

Environment
man.name==>wayne
man.age==>3

3.使用@ConfigurationProperties注解

使用@ConfigurationProperties如果出现“Spring boot Configuration Annotation Processor....”错误,在pom.xml中添加一下依赖

    
         org.springframework.boot 
         spring-boot-configuration-processor 
         true 
    

实体类:

    @Data
    @Component
    @ConfigurationProperties(prefix = "test")
    //如果需要指定properties文件可以使用下面的注解(同理用于@Value)
    //@PropertySource(value = "config.properties")
    public class Man {
        private String name;
        private String age;
    }

测试类:

    @Autowired
    Man man;

    @Test
    public void contextLoads() {
        System.out.println("ConfigurationProperties");
        System.out.println("man.name==>"+man.getName());
        System.out.println("man.age==>"+man.getAge());
    }

测试结果:

ConfigurationProperties
man.name==>wayne
man.age==>3

二、读取复杂类型

包括list、map

配置文件:

#map 
#test为前缀、map为变量名、map之后到“=”都是key,“=”之后为value
test.map.name=wayne
test.map.age=3
test.map.gender=male

#list
#test为前缀、list为变量名
test.list[0]=0
test.list[1]=1
test.list[2]=2

实体类:

需要注意的是prefix 必须是完整的前缀,

    @Data
    @Component
    @ConfigurationProperties(prefix = "test")
    public class Man {
        //变量名需要与配置文件中一样
        private Map map=new HashMap<>();
    
        private List list;
    }

测试类:

@Autowired
    Man man;

    @Test
    public void contextLoads() {
        System.out.println("list、map");
        System.out.println("man.map==>"+man.getMap());
        System.out.println("man.list==>"+man.getList());
    }

测试结果:

list、map
man.map==>{name=wayne, gender=male, age=3}
man.list==>[0, 1, 2]

yml类型配置文件

一、读取简单变量

yml配置文件读取简单变量的方式与上文properties的读取方式基本一致,不同的是配置文件的编写方式

配置文件:

#注意 “:”之后一定要空格
test:
  name: wayne
  age: 16

二、读取复杂变量

读取方式依旧相同,不同在yml的编写方式
配置文件:

# test为前缀
test:
  #map 为变量名
  map:
    # key value格式
    name: wayne
    age: 16
    height: 190
  #list 为变量名,- 表示list中的各项
  list:
    - 1
    - 2
    - 3
    - 4
  #复合型 List>格式
  listAndMap:
      - name: tom
        age: 10
      - name: jack
        age: 9
      - name: zhangsan
        age: 8

实体类:

@Data
@Component
@ConfigurationProperties("test")
public class Man {
    private Map map=new HashMap<>();
    private List list=new ArrayList<>();
    private List> listAndMap=new ArrayList<>();
}

测试类:

@Autowired
    Man man;

    @Test
    public void contextLoads() {
        System.out.println("list、map");
        System.out.println("man.map==>"+man.getMap());
        System.out.println("man.list==>"+man.getList());
        System.out.println("man.mapAndList==>"+man.getListAndMap());
    }

测试结果:

list、map
man.map==>{name=wayne, age=16, height=190}
man.list==>[1, 2, 3, 4]
man.mapAndList==>[{name=tom, age=10}, {name=jack, age=9}, {name=zhangsan, age=8}]

参考

properties

  • https://blog.csdn.net/dkbnull/article/details/81953190
  • https://www.cnblogs.com/lgjlife/archive/2019/04/24/10762893.html
  • https://blog.csdn.net/u014338530/article/details/86136986

yml

  • https://www.cnblogs.com/mysgk/p/9790801.html

你可能感兴趣的:(spring boot 从application配置文件中读取变量)