• SpringBoot读取配置文件的三种方法


    分析

    SpringBoot分别提供3中方式读取项目的application.properties配置文件的内容。这个方式分别为:Environment类、@Value注解以及@ConfigurationProperties注解。

    你必须要知道的事情:下面提供的三种方式,都可以拿到配置文件的信息,不要纠结那种方式好与坏。只要能解决问题就可以了。

    01、Environment获取属性值

    Environment是用来读取应用程序运行时的环境变量的类,可以通过key-value的方式读取application.properties和系统环境变量,命令行输入参数,系统属性等,具体如下:

    在application.yml文件定义如下:

    # 属性配置类的
    server:
      port: 8082
    
    spring:
      main:
        banner-mode: console
    
    # 自定义
    alipay:
      pay:
        appid: 123456
        notify: http://www.xxx.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    定义读取的类如下:

    package com.kuangstudy.web.properties;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    
    /**
     * Description:
     * Author: yandi Administrator
     * Version: 1.0
     * Create Date Time: 2021/12/11 21:25.
     * Update Date Time:
     *
     * @see
     */
    @RestController
    public class ReadPropertiesEnvironment {
    
        @Autowired
        private Environment environment;
    
    
        @GetMapping("/read/file")
        public Map readInfo(){
            Map map = new HashMap<>();
            map.put("port",environment.getProperty("server.port"));
            map.put("appid",environment.getProperty("alipay.pay.appid"));
            map.put("notify",environment.getProperty("alipay.pay.notify"));
            map.put("javaversion",environment.getProperty("java.version"));
            map.put("javahome",environment.getProperty("JAVA_HOME"));
            map.put("mavenhome",environment.getProperty("MAVEN_HOME"));
            return  map;
        }
    
        public static void main(String[] args) {
            Properties properties = System.getProperties();
            Set strings = properties.stringPropertyNames();
            for (String string : strings) {
                System.out.println(string+"===>"+properties.get(string));
            }
    
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    在浏览器访问

    http://localhost:8082/read/file

    img

    02、读取配置文件属性-@Value

    使用@Value注解读取配置文件内容,具体如下:

    package com.kuangstudy.web.properties;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    
    /**
     * Description:
     * Author: yandi Administrator
     * Version: 1.0
     * Create Date Time: 2021/12/11 21:25.
     * Update Date Time:
     *
     * @see
     */
    @RestController
    public class ReadPropertiesValue {
    
        @Value("${server.port}")
        private Integer port;
        @Value("${alipay.pay.appid}")
        private String appid;
        @Value("${alipay.pay.notify}")
        private String notify;
        @Value("${java.version}")
        private String javaVersion;
        @Value("${JAVA_HOME}")
        private String javaHome;
        @Value("${MAVEN_HOME}")
        private String mavenHome;
    
    
        @GetMapping("/read/value")
        public Map readInfo() {
            Map map = new HashMap<>();
            map.put("port", port);
            map.put("appid", appid);
            map.put("notify", notify);
            map.put("javaversion", javaVersion);
            map.put("javahome", javaHome);
            map.put("mavenhome", mavenHome);
            return map;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    浏览器如下:

    img

    结论:其实@Value底层就是Environment.java

    03、读取配置文件属性- @ConfigurationProperties

    使用@ConfigurationProperties首先建立配置文件与对象的映射关系,然后在控制器方法中使用@Autowired注解将对象注入。具体如下:

    01、在application.yml自定义属性

    # 自定义属性
    ksd:
      alipay:
        appid: 2021003100625328
        mkey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC9kGK4VMbYm
        ckey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx5i5LhEtDZw6Q6mUxkC5f6sAvZm9OncAkRXwfoBdDeKk
        callback: https://www.txnh.net/api/alipay/returnUrl
        charset: UTF-8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    02、定义属性配置类和属性类

    属性配置类如下:

    package com.kuangstudy.properties.config;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    /**
     * Description:
     * Author: yandi Administrator
     * Version: 1.0
     * Create Date Time: 2021/12/14 20:53.
     * Update Date Time:
     *
     * @see
     */
    @ConfigurationProperties(prefix = "ksd.alipay")//这个注解是用找到类
    @Data
    public class AlipayProperties {
        private String appid;
        private String mkey;
        private String ckey;
        private String callback;
        private String charset ="UTF-8";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    属性配置类,一定要进行注册在配置类中,如下:

    package com.kuangstudy.properties.config;
    
    import org.springframework.boot.SpringBootConfiguration;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    
    /**
     * Description:
     * Author: yandi Administrator
     * Version: 1.0
     * Create Date Time: 2021/12/14 20:53.
     * Update Date Time:
     *
     * @see
     */
    // 用配置类去注册:属性配置类
    @EnableConfigurationProperties(AlipayProperties.class)
    @SpringBootConfiguration
    public class AlipayConfiguration {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    03、属性配置类使用

    package com.kuangstudy.properties;
    
    import com.kuangstudy.properties.config.AlipayProperties;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * Description:
     * Author: yandi Administrator
     * Version: 1.0
     * Create Date Time: 2021/12/14 20:36.
     * Update Date Time:
     *
     * @see
     */
    @RestController
    @Slf4j
    public class AlipayController2 {
    
        @Autowired
        private AlipayProperties alipayProperties;
    
        @GetMapping("/alipay2")
        public String alipay2() {
            log.info("你支付是的:{}", alipayProperties);
            return "success";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    04、关于自定义属性的自动提示问题和警告问题

    img

    解决步骤如下:

    01、在pom.xml进行以来自动提示procossor

    
        org.springframework.boot
        spring-boot-configuration-processor
    
    
    • 1
    • 2
    • 3
    • 4

    02、把idea打开的application.yml文件务必一定要关闭

    img

    03、然后在重新打开application.yml

    就可以出现自动提示,警告也会消失,然后输入ksd.就会出现自动提示

    总结
    1、Environment @Value 不具有面向对象的特征,属性过多就不方便管理和控制,太多就会现得杂乱无章。而且也没用自动提示的功能。
    2、@ConfigurationProperties 就是面向对象的机制,可以自动提示。
    所以底层springboto用的是@ConfigurationProperties
    3、当然在开发中,你用那种都可以获取到相同的效果,根据业务选择最佳的方式即可。

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    SpringBoot轻轻松松搞定用户邮箱登录注册
    6.1、Flink数据写入到文件
    RFID技术在危险废物管理中的应用解决方案
    java-net-php-python-jspm酒店信息管理系统计算机毕业设计程序
    iOS 判断触摸位置是否在图片的透明区域
    talemu---蒙特卡洛仿真软件产品介绍
    GEE——自GLDAS-2.0 每日流域模型批量导出逐月Terrestrial water storage水存量影像下载
    深度学习环境配置9——Ubuntu下的tensorflow-gpu==2.4.0环境配置
    playwright: local variable ‘page‘ referenced before assignment
    氨基染料研究:Lumiprobe FAM 胺,6-异构体
  • 原文地址:https://blog.csdn.net/m0_67391121/article/details/126115493