解决在SpringBoot中使用@Value给静态变量注入值失效的问题



  说好每周坚持更新一篇博客,还是没能坚持下去,看来要好好反省下自己啦!不说太多废话,工作中自己踩过的一些坑一定要把它记录在博客让更多人知道,让更多人更加专注于业务代码的实现,没必要因为一些坑而耗费太多的时间!

  今天讲的坑就是在SpringBoot中使用@Value给静态变量注入值失效的问题,相信不少小伙伴在工作中也会踩到这样的坑。那么这坑具体是怎么样的呢,看我下面详细的分析。
 首先先看下面两张图片:

在这里插入图片描述在这里插入图片描述
  在前几周开发时我写了个redis工具类,然后想通过使用如上所示的方式来给redis的相关键值对设置过期时间,本来以为可以设置成功的,但看到日志打印那里过期时间居然显示为0,而不是我在application.properties中设置的过期时间,这就导致了我在redis中插入的键值对马上过期了,从而获取不到具体的值!

  经过调试我发现RISK_CPT_RULE_FILE_EXPIREDTIME这个变量值是为0的,这说明这个变量直接读取了int的初始默认值。原因既然都找到了,那么如何解决呢?

  既然不能正常地读取使用@Value中的值,那可以换种思路选择以方法注入的形式解决。具体步骤如下:

  1. 首先在RedisUtil这个类上方添加@Component注释,然后再声明一个staticRiskCptRuleFileExpiredtime静态变量;
  2. 然后定义一个setRiskCptRuleFileExpiredtime方法,在方法上方添加@Value("${risk.cpt.rule.file.expiredtime}"),意思就是读取这个配置然后将这个配置的值赋值给这个方法形参riskCptRuleFileExpiredtime,最后方法形参riskCptRuleFileExpiredtime会再赋值给staticRiskCptRuleFileExpiredtime这个静态变量,从而在下面的方法中直接读取staticRiskCptRuleFileExpiredtime这个变量。

      为了让大家更方便理解,我将相关截图贴到了下面:
    在这里插入图片描述

      其实这个问题跟我之前写的解决使用@Autowired导入静态对象的实例时出现为null的情况的博客中的问题挺类似的,有兴趣的同学可以看看。具体链接我贴了出来。解决使用@Autowired导入静态对象的实例时出现为null的情况

      从这周开始,以后我都会至少更新一篇博客,无论什么类型的都好,不过我会尽量以技术为主,欢迎大家监督!
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Melo_FengZhi

您的鼓励对我就是巨大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值