SpringBoot使用@Value从yml文件取值为空--注入静态变量

Posted 微笑点燃希望

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot使用@Value从yml文件取值为空--注入静态变量相关的知识,希望对你有一定的参考价值。

SpringBoot使用@Value从yml文件取值为空--注入静态变量

1.application.yml中配置内容如下:

  1.  
    pcacmgr:
  2.  
    publicCertFilePath: E:\pcacmgr\CerFiles\xh_public.cer
  3.  
    encPublicCertFilePath: E:\pcacmgr\CerFiles\hjzf_encPublic.cer
  4.  
    encPfxFilePath: E:\pcacmgr\CerFiles\hjzf_encPfx.pfx
  5.  
    encPfxFilePwd: 11111111

2.通过@Value获取值:

  1.  
    @Configuration
  2.  
    public class PcacIntegrationUtil {
  3.  
    @Value("${pcacmgr.publicCertFilePath}")
  4.  
    private static String publicCertFilePath;
  5.  
     
  6.  
    @Value("${pcacmgr.encPfxFilePath}")
  7.  
    private static String encPfxFilePath;
  8.  
     
  9.  
    @Value("${pcacmgr.encPfxFilePwd}")
  10.  
    private static String encPfxFilePwd;
  11.  
     
  12.  
    @Value("${pcacmgr.encPublicCertFilePath}")
  13.  
    private static String encPublicCertFilePath;
  14.  
     
  15.  
    public static String signData(String sourceData) {
  16.  
    System.out.println(publicCertFilePath);
  17.  
    }
  18.  
    }

3.启动项目调用过程中发现获取值为null。

4.发现是static导致,以下为解决方案:

  1.  
    @Configuration
  2.  
    public class PcacIntegrationUtil {
  3.  
    private static Logger logger = LoggerFactory.getLogger(PcacIntegrationUtil.class);
  4.  
     
  5.  
    private static String publicCertFilePath;
  6.  
    public static String getPublicCertFilePath() {
  7.  
    return publicCertFilePath;
  8.  
    }
  9.  
    @Value("${pcacmgr.publicCertFilePath}")
  10.  
    public void setPublicCertFilePath(String publicCertFilePath) {
  11.  
    PcacIntegrationUtil.publicCertFilePath = publicCertFilePath;
  12.  
    }
  13.  
     
  14.  
    public static String signData(String sourceData) {
  15.  
    System.out.println(publicCertFilePath);
  16.  
    }
  17.  
    }

问题解决,打印结果与yml文件配置的内容相符。

 

心得:使用注解的方式,不过注解写在非static的方法上(Spring的注解不支持静态的变量和方法)。

以上是关于SpringBoot使用@Value从yml文件取值为空--注入静态变量的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot通过@Value获取application.yml配置文件的属性值

springboot 中yml配置

linux安装apollo;以及springcloud采用apollo配置时使用本地配置覆盖;springboot从apollo拉取配置

4springboot的配置文件及yml使用

springboot加载指定的属性文件(properties和yml文件)

kotlin spring @value 注解