1. 程式人生 > >SpringBoot使用@Value從yml檔案取值為空--注入靜態變數

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的註解不支援靜態的變數和方法)。