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为属性赋值时采用的是动态的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);
}
}
来源:https://blog.csdn.net/Decade_Faiz/article/details/126238672
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删
- 一、前言近期一项目A需实现数据同步到另一项目B数据库中,在不改变B项目的情况下,只好选择项目A中切换数据源,直接把数据写入项目B的数据库中。
- Spring AOP后置通知修改响应httpstatus1.定义Aspect/** * 响应体切面 * 后置通知修改httpstatus *
- java 线程锁在Java线程中运用synchronized关键字来达到同步的 synchronized可以锁方法,锁类,锁对象,锁代码块方
- 【题目】 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中
- 定义: SharedPreferences
- 背景项目中我们经常会用搜索功能,普通的搜索我们可以用一个SQL的like也能实现匹配,但是搜索的核心需求是全文匹配,对于全文匹配,数据库的索
- OutputDebugString属于windows API的,所以只要是包含了window.h这个头文件后就可以使用了。可以把调
- 一、前置说明本节大纲使用lombok插件的好处如何安装lombok插件使用lombok提高开发效率二、使用lombok插件的好处我们在jav
- 介绍环境配置Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEcl
- 本文实例为大家分享了C#实现截图工具小项目的具体代码,供大家参考,具体内容如下1.起因一直用的截图是qq的截图,所以想要实现一个简单点的截图
- 前言数据驱动测试是相同的测试脚本使用不同的测试数据执行,测试数据和测试行为完全分离。数据驱动是做自动化测试中很重要的一部分,数据源的方案也是
- jwt简介冒泡排序:(Bubble Sort)是一种简单的交换排序。之所以叫做冒泡排序,因为我们可以把每个元素当成一个小气泡,根据气泡大小,
- 我就废话不多说了,大家还是直接看代码吧~/// <summary> /// 字符串转Unicode //
- 今天突然想起来,java产生随机数的问题,上机试了一下,找到了一点区别,在这里总结一下;直接调用Math.random()是产生一个[0,1
- 一、简介在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,
- 后台控制层: public static final String HEAD_IMG_DIR = "D:/upload/&quo
- 传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets
- 注意是maven的webapp:选择maven下一步下一步。maven下载过慢在setting中加入镜像。 我也有疑问这是什么鬼格式,但是证
- 废话不多说了,直奔主题了。需要两个jar包:commons-fileupload.jarCommons IO的jar包(本文使用common