美文网首页spring相关
spring boot 从application配置文件中读取变

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

作者: Waynnnn | 来源:发表于2019-10-11 09:24 被阅读0次

    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中添加一下依赖

        <dependency>
            <groupId> org.springframework.boot </groupId>
            <artifactId> spring-boot-configuration-processor </artifactId>
            <optional> true </optional>
        </dependency>
    

    实体类:

        @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<String,String> map=new HashMap<>();
        
            private List<Integer> 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<Map<String,String>>格式
      listAndMap:
          - name: tom
            age: 10
          - name: jack
            age: 9
          - name: zhangsan
            age: 8
    

    实体类:

    @Data
    @Component
    @ConfigurationProperties("test")
    public class Man {
        private Map<String,String> map=new HashMap<>();
        private List<Integer> list=new ArrayList<>();
        private List<Map<String,String>> 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

    yml

    相关文章

      网友评论

        本文标题:spring boot 从application配置文件中读取变

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