SpringBoot中利用Environment给静态变量赋值配置文件中的常量 | 您所在的位置:网站首页 › springboot静态变量@value拿不到值 › 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; } }这样我们就把值赋给静态变量了!! 文章中出现任何不对的地方,望大家批评指正~~ |
CopyRight 2018-2019 实验室设备网 版权所有 |