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

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

pcacmgr:
    publicCertFilePath: E:\\pcacmgr\\CerFiles\\xh_public.cer
    encPublicCertFilePath: E:\\pcacmgr\\CerFiles\\hjzf_encPublic.cer
    encPfxFilePath: E:\\pcacmgr\\CerFiles\\hjzf_encPfx.pfx
    encPfxFilePwd: 11111111

2.通过@Value获取值:

@Configuration
public class PcacIntegrationUtil {
	@Value("${pcacmgr.publicCertFilePath}")
	private static String publicCertFilePath;
	
	@Value("${pcacmgr.encPfxFilePath}")
	private static String encPfxFilePath;
	
	@Value("${pcacmgr.encPfxFilePwd}")
	private static String encPfxFilePwd;
	
	@Value("${pcacmgr.encPublicCertFilePath}")
	private static String encPublicCertFilePath;
	
	public static String signData(String sourceData) {
		System.out.println(publicCertFilePath);
	}
}

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

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

@Configuration
public class PcacIntegrationUtil {
	private static Logger logger = LoggerFactory.getLogger(PcacIntegrationUtil.class);

	private static String publicCertFilePath;
    public static String getPublicCertFilePath() {
        return publicCertFilePath;
    }
    @Value("${pcacmgr.publicCertFilePath}")
    public void setPublicCertFilePath(String publicCertFilePath) {
    	PcacIntegrationUtil.publicCertFilePath = publicCertFilePath;
    }
    
    public static String signData(String sourceData) {
    	System.out.println(publicCertFilePath);
    }
}

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


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


  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值