Springboot如何通过yml配置文件为静态成员变量赋值

目录
  • 通过yml配置文件为静态成员变量赋值
    • 这里我强调一句
  • Springboot静态变量读取yml配置信息
    • 解决方式1
    • 解决方式2

通过yml配置文件为静态成员变量赋值

我们对springboot为普通成员变量的方式很熟悉,所以经常定式思维的认为静态属性的赋值和普通属性一样,结果调试的时候调试半天发现静态属性还是Null。

仔细一想才发现静态属性和普通属性的赋值方式不太一样。

到底是哪里不一样呢?问题出在set方法。我们通过idea快捷键或注解 @Data 得到的set方法是静态方法。

这里我强调一句

  • 用idea快捷键或注解 @Data 得到的set方法是静态方法
  • 用idea快捷键或注解 @Data 得到的set方法是静态方法
  • 用idea快捷键或注解 @Data 得到的set方法是静态方法

而springboot为属性赋值时采用的是动态的setter注入,所以我们按照为普通属性赋值的方法给静态变量赋值必然是行不通的。

所以我们只需要将图里面的 static 给删掉就大功告成了!!

顺便再提一句,在这个类上面需要加上 @ConfigurationProperties(prefix = "reggie.qiniu") 注解,并且在调用的地方加上 @EnableConfigurationProperties(QiniuUtils.class) 注解,括号里面的参数不可以跟我一样哦,如果多处都需要调用的话,你嫌麻烦可以直接在springboot启动类上加上这个注解。

怕有的同学还是看不懂,我再贴一下我yml配置文件里面配置的写法。

Springboot静态变量读取yml配置信息

因为spring加载静态方法比IOC早,所以不能直接使用@Value注解读取yml配置,读取结果往往是null。

解决方式1

我们可以通过@PostConstruct在服务加载Servlet的时候运行

@Configuration
public class DemoConfig {

    //给静态变量赋值
    @Value("${mvc.test}")
    public  int test;
    public void setTest(int test) {
        this.test = test;
    }

    public static   int TEST;
    @PostConstruct
    public  void init(){
        DemoConfig.TEST = test;
    }

}

然后在我们需要的地方调用就行了

@Component
public class MyConfig {
    public  void show(){
        System.out.println(DemoConfig.TEST);
    }
}

解决方式2

我们可以通过@AutoConfigureAfter 来在当前类注入到容器之前去加载相关配置类

@Configuration
public class DemoConfig {
    public static int test;
    //给静态变量赋值
    @Value("${mvc.test}")
    public void setTest(int test) {
        DemoConfig.test = test;
    }
}
@AutoConfigureAfter({DemoConfig.class})  //加载当前文件之前先去加载DemoConfig文件
@Component
public class MyConfig {
    public  void show(){
        //然后在我们需要的地方调用就行了
        System.out.println(DemoConfig.test);
    }

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • spring boot静态变量注入配置文件详解

    本文实例为大家分享了spring boot静态变量注入配置文件的具体代码,供大家参考,具体内容如下 spring 静态变量注入 spring 中不支持直接进行静态变量值的注入,我们看一下代码: @Component(value = "KafkaConfig") @ConfigurationProperties(prefix = "baseConfig") public class KafkaConfig { private static String logBrok

  • springboot 使用yml配置文件给静态变量赋值教程

    声明: 此处需求是修改封装的clickhouseUtil数据查询引擎连接工具类.由于此类中的方法都是静态方法.连接地址等参数需要根据不同环境改变.例如开发下地址,测试下地址,生产地址等,所有通过配置文件来获取不同环境下的配置参数,但是使用的方法是静态的,所有不能使用一般情况下的@value直接给变量赋值,需要用到spring 属性的set方法来给静态变量赋值,然后静态方法使用静态变量即可 方法: 第一步:在yml文件中配置需要的参数 clickhouse: address: jdbc:click

  • SpringBoot实现yml配置文件为变量赋值

    目录 yml配置文件为变量赋值 1. 创建person类和Car类 2. 为person类创建yml配置文件 3.创建启动类 在yml文件中配置变量 例如:二维码的内容 yml配置文件为变量赋值 1. 创建person类和Car类 在person类上加注释 @ConfigurationProperties(prefix = "person"),表明这个类的成员变量的值从配置类注入. 注意这里的person类的成员变量需要有get/set方法. import org.springfram

  • Springboot如何通过yml配置文件为静态成员变量赋值

    目录 通过yml配置文件为静态成员变量赋值 这里我强调一句 Springboot静态变量读取yml配置信息 解决方式1 解决方式2 通过yml配置文件为静态成员变量赋值 我们对springboot为普通成员变量的方式很熟悉,所以经常定式思维的认为静态属性的赋值和普通属性一样,结果调试的时候调试半天发现静态属性还是Null. 仔细一想才发现静态属性和普通属性的赋值方式不太一样. 到底是哪里不一样呢?问题出在set方法.我们通过idea快捷键或注解 @Data 得到的set方法是静态方法. 这里我强

  • SpringBoot 使用 @Value 注解读取配置文件给静态变量赋值

    1.application.properties 配置文件 mail.username=xue@163.com mail.password=xue mail.host=smtp.163.com mail.smtp.auth=true 2.给普通变量赋值,直接在变量上添加 @Value 注解 import org.springframework.beans.factory.annotation.Value; public class MailConfig { @Value("${mail.user

  • SpringBoot读写操作yml配置文件方法

    目录 yml配置规则 普通的kv读取 读取到集合和数组 读取为对象和Map yml配置规则 属性跟属性值之间使用“:”和一个“空格”隔开,层级结构通过缩进对齐,缩进只能使用空格,不能用tab,并且大小写敏感,使用#注释文档: yml配置除了能像properties读取为kv结构,还能方便的读取成集合(List.Set等).数组.对象.Map,还能进行嵌套结构读取: 普通的kv读取 普通kv结构可以直接使用@Value标签读取,@Value除了可以读取普通kv,也能读取List或Map结构里的某一

  • 关于springboot加载yml配置文件的no字段自动转义问题

    目录 加载yml配置文件的no字段自动转义 springboot配置文件自动转译的坑 小结一下 加载yml配置文件的no字段自动转义 项目上线了才发现一个字段被转义了,如下图: 本来应该会拿到no字段和数据进行比对的,结果发现比对完的数据这个字段全是null,debug才发现这个字段这么写在加载yml文件之后自动变成了"false",第一次发现这个问题,修改很方便,把yml文件里面这个no,换成'no'就可以不被转义成"false"了,谨以此提醒,小错误导致临时调整

  • SpringBoot动态修改yml配置文件的方法详解

    目录 前言 具体实现 实现代码 测试 源码 总结 前言 记录下SpringBoot修改yml配置文件后无需重启服务的方式(打包后生效),效果如下: 具体实现 实现代码 pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </d

  • springboot如何引入外部yml配置文件

    目录 springboot引入外部yml配置文件 springboot引入多个yml 1. 项目内部配置文件 2. 外部配置加载顺序 springboot引入外部yml配置文件 当需要在springboot中引用其他的yml文件时,需要在application.yml里配置 spring: profiles: include: email,xmyb 值得注意的是:application-email.yml的前缀一定要和主在配置文件application.yml的名字一致 springboot引入

  • SpringBoot yml配置文件读取方法详解

    目录 yaml介绍 yaml语法规则 yaml数据读取 Environment读取yaml全部属性数据 自定义对象封装指定数据 yaml介绍 YAML(YAML Ain't Markup Language),一种数据序列化格式 优点: 容易阅读 容易与脚本语言交互 以数据为核心,重数据轻格式 YANL文件扩展名 .yml(主流) .yaml 几种数据格式比较 yaml语法规则 大小写敏感 属性层级关系使用多行描述,每行结尾使用冒号结束 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许

  • SpringBoot从yml配置文件中读常用参数值实例方法

    SpringBoot现在基本上都是使用application-XXX.yml(生产环境为pro,开发测试环境为dev)来配置项目中的一些配置条件,在springboot中还可以通过从yml文件中将yml中的数据直接读取出来. 1.yml文件(这里设置参数的时候往往设置两层前缀,避免在调用的时候该属性中的部分参数名与计算机中的某些名字冲突) test: person: lastName: hello age: 18 boss: false birth: 2017/12/12 maps: {k1:

随机推荐