“SpringBoot读取application.yml报错问题及解决”主要是由于读取到的配置属性与代码中使用的属性不一致导致的,下面给出详细的解决攻略。
问题描述
SpringBoot项目中使用application.yml作为配置文件,但是运行时却遇到了以下报错:
Caused by: org.springframework.boot.context.properties.ConfigurationPropertiesBindException:
Failed to bind properties under 'server' to org.springframework.boot.autoconfigure.web.ServerProperties$Jetty class:
Property: server.context-path
Value: /app
Origin: class path resource [application.yml]:2:15
Reason: could not find matched setter for property: contextPath
原因分析
从报错信息中可以看出,原因是找不到contextPath这个属性的setter方法。问题就在于,application.yml中配置的属性与代码中使用的属性不一致。
解决方法
1. 保持属性名一致
解决这个问题的方法有两种。第一种是保持属性名一致。即在application.yml中的配置属性与Java代码中对应的属性名一一对应,属性名大小写也要保持一致。
例如,下面是一个简单的示例:
application.yml配置:
server:
context-path: /app
Java代码:
@ConfigurationProperties(prefix = "server")
public class ServerProperties {
private String contextPath;
public String getContextPath() {
return contextPath;
}
public void setContextPath(String contextPath) {
this.contextPath = contextPath;
}
}
在这个示例中,将application.yml中的server.context-path属性名与Java代码中的contextPath属性名保持一致,并且大小写也一致。
2. 使用@Value注解
如果有些情况下,配置文件中的属性名和Java代码中的属性名不一样,那么可以在Java代码中使用@Value注解来指定属性名。例如:
application.yml配置:
myconfig:
my-name: Tommy
Java代码:
@Component
public class MyService {
@Value("${myconfig.my-name}")
private String name;
// 处理业务代码...
}
在这个示例中,@Value("${myconfig.my-name}")指定了属性名为myconfig.my-name,而不是Java代码中的name属性名。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot读取application.yml报错问题及解决 - Python技术站