SpringBoot中利用Environment给静态变量赋值配置文件中的常量 您所在的位置:网站首页 springboot静态变量@value拿不到值 SpringBoot中利用Environment给静态变量赋值配置文件中的常量

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

2024-06-29 13:21| 来源: 网络整理| 查看: 265

之前在公司做业务开发的时候有个需求,需要给工具类中静态变量赋值为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; } }

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有