我的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
谢谢

最佳答案

问题是您以错误的方式使用了@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可能会更容易,因为您最初并没有真正使用它们。

关于java - Spring Boot 2中的元素未绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53167040/

10-10 11:10