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

作者:嗯mua. 时间:2021-08-03 12:03:17 

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

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

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

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

这里我强调一句

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

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

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

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

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

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

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

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

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

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

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

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

解决方式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);
   }

}

来源:https://blog.csdn.net/Decade_Faiz/article/details/126238672

标签:Springboot,yml,静态成员,变量赋值
0
投稿

猜你喜欢

  • 基于springboot的RestTemplate、okhttp和HttpClient对比分析

    2021-07-02 03:14:21
  • Java实现InputStream的任意拷贝方式

    2022-04-08 10:11:32
  • idea2017建立jsp工程及tomcat配置教程

    2023-06-04 20:24:40
  • Java中输出字符的ASCII值实例

    2023-02-27 08:59:11
  • Java Swing组件文件选择器JFileChooser简单用法示例

    2021-09-23 21:00:34
  • Android仿360桌面手机卫士悬浮窗效果

    2021-06-16 10:06:37
  • SpringBoot打War包上传到阿里云的LINUX服务器的操作方法

    2021-09-26 22:27:01
  • Spring Data JPA框架快速入门之自定义Repository接口

    2023-05-23 03:49:48
  • Java字节与字符流永久存储json数据

    2022-12-27 21:10:13
  • Java中IO流解析及代码实例详解

    2022-03-08 22:32:16
  • JAVA中的字符串常量池使用操作代码

    2021-11-24 02:00:57
  • 面试初级Java开发问到Arrays

    2023-11-27 05:40:04
  • Java中try catch处理异常示例

    2023-11-07 00:43:17
  • Java数据结构之图的基础概念和数据模型详解

    2022-03-25 11:27:04
  • Java调用Shell命令的方法

    2022-01-06 20:01:34
  • Java异常学习之自定义异常详解

    2023-09-25 00:57:27
  • Java Document生成和解析XML操作

    2021-11-10 13:17:46
  • CentOS 7下JDK8的详细安装步骤

    2022-02-18 12:06:28
  • java json 省市级联实例代码

    2021-11-13 18:50:35
  • Android中ImageView实现选择本地图片并显示功能

    2023-07-02 23:47:09
  • asp之家 软件编程 m.aspxhome.com