@Value注解在Springboot3中获得值为null的问题解决办法

我在调试Jwt插件的时候,突然发现通过@Value注解从properties文件中获取secret值时为null。为了确保密钥的安全性,我们一般把这些都配置在properties文件中,由专人管理。如果把密钥直接写在代码中,凡是参与项目的人员就都知道密钥了,存在一定的风险性。近期我们升级了Springboot框架,却发现如此这样获得的值是null。

获取不到值的代码示例

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ValueTest {
    @Value(value = "${jwt.secret}")
    private static String secret;

    public static String getSecret(){
        return secret;
    }
}

测试代码

@RunWith(SpringRunner.class)
@SpringBootTest
class FastWfsApplicationTests {
    
    @Test
    public void getValueTest(){
        String secret = ValueTest.getSecret();
        System.out.println(secret);
    }
}

测试结果

解决方案

经过一番百度、文心一言、豆包、通义千问,多数的解答都是说获取值时提前于注入值的时间,所以拿不到值,最后终于有人给出了解决方案,就是通过set方式提前获取到这个属性值。

代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ValueTest {
    private static String secret;
    @Value(value = "${jwt.secret}")
    public void setSecret(String secretValue){
        secret = secretValue;
    }
    public static String getSecret(){
        return secret;
    }
}

测试结果

虽然问题解决了,但总觉着别扭,这算是曲线救国吗?代码写成这样,感觉很不简洁,而且那个作者也不建议这样用,但是他们提供的其它方法都不行。

有没有其它解决方案的大神,我还是希望用下面的方式,因为我有强迫症,嘻嘻。

@Value(value = "${jwt.secret}")
private static String secret;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值