Springboot中如何利用yml文件给静态变量赋值?
- 内容介绍
- 文章标签
- 相关推荐
本文共计803个文字,预计阅读时间需要4分钟。
目录:使用YML配置文件为静态成员变量赋值
强化建议:Springboot静态变量读取YML配置信息
解决方案1:直接在YML文件中配置
解决方案2:通过注解读取YML配置信息
通过YML配置文件为静态成员变量赋值,我们可以在Springboot项目中方便地管理静态变量的值。这里,我们强调如何通过Springboot读取YML配置信息,并应用于静态变量。
1. 直接在YML文件中配置
yamlapplication.ymlstaticVariable: key: value
2. 通过注解读取YML配置信息
java@Configurationpublic class StaticVariableConfig {
@Value(${staticVariable.key}) private static String staticValue;
public static String getStaticValue() { return staticValue; }}
这样,我们就可以通过YML配置文件为Springboot项目的静态成员变量赋值,同时利用Springboot的配置读取功能,方便地进行配置管理和变更。
目录
- 通过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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。
本文共计803个文字,预计阅读时间需要4分钟。
目录:使用YML配置文件为静态成员变量赋值
强化建议:Springboot静态变量读取YML配置信息
解决方案1:直接在YML文件中配置
解决方案2:通过注解读取YML配置信息
通过YML配置文件为静态成员变量赋值,我们可以在Springboot项目中方便地管理静态变量的值。这里,我们强调如何通过Springboot读取YML配置信息,并应用于静态变量。
1. 直接在YML文件中配置
yamlapplication.ymlstaticVariable: key: value
2. 通过注解读取YML配置信息
java@Configurationpublic class StaticVariableConfig {
@Value(${staticVariable.key}) private static String staticValue;
public static String getStaticValue() { return staticValue; }}
这样,我们就可以通过YML配置文件为Springboot项目的静态成员变量赋值,同时利用Springboot的配置读取功能,方便地进行配置管理和变更。
目录
- 通过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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

