我的Spring Boot应用程序中有一个application.yml文件,它不愿运行。
根据日志记录的原因,未绑定元素[simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host]。但是,该属性是在application.yml中设置的,编译器甚至会返回它的值。
如果有人可以帮我解决这个问题,我将不胜感激。
simulator:
geo:
host: http://localhost:8080/
b12: http://localhost:8080/geo/b12
b13: http://localhost:8080/geo/b13
b21: http://localhost:8080/geo/b21
c6: http://localhost:8080/geo/c6
和Java类
@Getter
@Configuration
@ConfigurationProperties(prefix = "simulator",ignoreUnknownFields = false)
public class VendorSimulatorProperties {
@Value("${simulator.geo.host:http://localhost:8080/}")
private String initUrl;
@Value("${simulator.geo.b12}")
private String geoB12Url;
@Value("${simulator.geo.b13}")
private String geoB13Url;
@Value("${simulator.geo.b21}")
private String geoB21Url;
@Value("${simulator.geo.c6}")
private String geoC6Url;
}
当我开始运行应用程序时,出现错误msg:
**************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target [Bindable@1c140c7c type = com.mathartsys.dlc.thirdparty.vendor.config.VendorSimulatorProperties$$EnhancerBySpringCGLIB$$eb0a550b, value = 'provided', annotations = array<Annotation>[@org.springframework.boot.context.properties.ConfigurationProperties(prefix=simulator, value=simulator, ignoreUnknownFields=false, ignoreInvalidFields=false)]] failed:
Property: simulator.geo.b12
Value: http://localhost:8080/geo/b12
Origin: class path resource [config/application-dev.yml]:204:14
Reason: The elements [simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host] were left unbound.
Property: simulator.geo.b13
Value: http://localhost:8080/geo/b13
Origin: class path resource [config/application-dev.yml]:205:14
Reason: The elements [simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host] were left unbound.
Property: simulator.geo.b21
Value: http://localhost:8080/geo/b21
Origin: class path resource [config/application-dev.yml]:206:14
Reason: The elements [simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host] were left unbound.
Property: simulator.geo.c6
Value: http://localhost:8080/geo/c6
Origin: class path resource [config/application-dev.yml]:207:13
Reason: The elements [simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host] were left unbound.
Property: simulator.geo.host
Value: http://localhost:8080/
Origin: class path resource [config/application-dev.yml]:203:15
Reason: The elements [simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host] were left unbound.
这个问题困扰了我很久,希望有人能给我一些建议。 我用过springboot 2.0 谢谢
答案 0 :(得分:3)
问题是您以错误的方式使用了@ConfigurationProperties
。您可以使用@ConfigurationProperties
或@Value
,但不能同时使用。
该解决方案要么将您的类固定为可用于@ConfigurationProperties
,要么删除@ConfigurationProperties
批注。
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "simulator.geo",ignoreUnknownFields = false)
public class VendorSimulatorProperties {
private String host = "http://localhost:8080/";
private String b12;
private String b13;
private String b21;
private String c6;
}
您需要修复prefix
,它应为simulator.geo
,并且属性应以文件中的键命名。您还需要在getter旁边设置setter。但是,这还需要更改其余配置,以使用新生成的吸气剂。
对您来说,删除@ConfigurationProperties
可能更容易,因为您一开始并没有真正使用它们。
答案 1 :(得分:1)
我遇到了同样的问题,但就我而言,这是因为我添加了 @AllArgsConstructor 但没有添加 @NoArgConstructor。结果,Spring 无法创建配置对象(使用默认构造函数),因此它只是跳过处理配置并打印出警告。
例如
@Getter
@Setter
@AllArgsConstructor
@NoArgConstructor // need to add this if you have @AllArgsConstructor
public class ServerConfiguration {
private String host;
private int port;
}