springboot中普通类注入yml中定义的参数,为什么会是null?
public class PublishService
extends Service
{
@Value("${vnpt.url}")
private static String vnptUrl;
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL(vnptUrl+"?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
PUBLISHSERVICE_WSDL_LOCATION = url;
PUBLISHSERVICE_EXCEPTION = e;
}
.....以下代码省略
报错信息
javax.xml.ws.WebServiceException: java.net.MalformedURLException: no protocol: null?wsdl
at com.haier.cosmo.wms.cp.out.service.service.printInvoiceService.PublishService.<clinit>(PublishService.java:34)
at com.haier.cosmo.wms.cp.out.service.service.impl.sto.FgStoServiceImpl.printVNPT(FgStoServiceImpl.java:177)
yml配置
# vnpt
vnpt:
url: https://aquavn-tt78admindemo.vnpt-invoice.com.vn/PublishService.asmx
回复
1个回答
test
2024-07-04
问题出在这个地方:private static String vnptUrl;。静态变量没办法直接通过@Value注入。你要先删除static关键字,让vnptUrl成为一个普通的实例变量。然后,PublishService类要是一个 Spring 管理的 Bean,方便 Spring 可以注入配置的值。如果你要vnptUrl是一个静态变量,你可以这样写:
@Value("${vnpt.url}")
public void setVnptUrl(String vnptUrl) {
PublishService.vnptUrl = vnptUrl;
}
这样,Spring 就能正确地注入vnptUrl的值了。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容