SpringBoot中利用Environment给静态变量赋值配置文件中的常量

之前在公司做业务开发的时候有个需求,需要给工具类中静态变量赋值为application.yml中记录的常量,稍微花了点功夫,也踩了点坑,所以在此做个记录。

配置文件

配置文件中的常量如下:

internal:
  aes:
    key: ${AES_KEY:testkey}
    iv: ${AES_IV:testiv}

@Value()注解

一般情况下,我们使用@Value()注解即可给变量赋值成我们指定key的值,例如:

@Value("${internal.aes.key}")
private String key;

@Value("${internal.aes.iv}")
private String iv;

但是,SpringBoot中使用@Value()只能给普通变量注入值,不能直接给静态变量赋值。所以@Value()就不适用于这种情况。

使用Environment赋值

网上有不少文章给出的方案都是选择给变量增加一个set方法,然后将@Value()注解置于set方法之上,例如:

private static String key;
private static String iv;

@Value("${internal.aes.key}")
public void setKey(String key){
	key = key;
}
@Value("${internal.aes.iv}")
public void setIv(String iv){
	iv = iv;
}

我选择的方案是使用Environment给变量赋值,两种方案都能实现需求,大家可以自行选择哈。话不多说直接上代码:

@Component //需要将工具类作为spring bean
public class AESUtil implements CommandLineRunner, EnvironmentAware { //需要实现这两个接口
	private Environment environment;

    public static String S_KEY;
    public static String IV_PARAMETER;

	@Override
    public void run(String... args) throws Exception {
    	//这里给静态变量赋值
        AESUtil.S_KEY = environment.getProperty("internal.aes.key");
        AESUtil.IV_PARAMETER = environment.getProperty("internal.aes.iv");
    }

    @Override
    public void setEnvironment(Environment env) {
        this.environment = env;
    }
}

这样我们就把值赋给静态变量了!!

文章中出现任何不对的地方,望大家批评指正~~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值