当前位置: 首页 > 知识库问答 >
问题:

SpringBoot 2元素未绑定

陶宜民
2023-03-14

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

共有2个答案

马国源
2023-03-14

我遇到了同样的问题,但在我的情况下,这是因为我添加了@AllArgsConstructor但没有添加@NoArgConstructor。结果,Spring无法创建配置对象(使用默认构造函数),因此它只是跳过处理配置并打印出警告。

例如。

@Getter
@Setter
@AllArgsConstructor
@NoArgConstructor // need to add this if you have @AllArgsConstructor
public class ServerConfiguration {
    private String host;
    private int port;
}
王长卿
2023-03-14

问题是您以错误的方式使用了配置属性。您可以使用配置属性(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;

}

您需要修复前缀,它应该是模拟器。geo和您的属性应该以文件中的键命名。您还需要getter旁边的setter。然而,这也需要更改其余的配置,以使用新生成的getter。

对于您来说,删除ConfigurationProperties可能更容易,因为您一开始并没有真正使用它们。

 类似资料:
  • 如何在JavaSpringBoot应用程序中从配置yml文件加载对象列表? 我已经尝试了几个来源: 配置-属性-在-Spring-引导 Spring Boot配置属性示例 SpringBoot 2的元素没有绑定 堆栈:Java11,SpringBoot 2.1.4,Lombok,. yml格式的配置文件。 我尝试实现简单的@Component,它将从配置文件加载数据。 配置值为: 用于数据加载的J

  • 问题内容: 所以我一直在遵循这个请求,将Redis集成到jhipster生成器上:https : //github.com/jhipster/generator- jhipster/pull/10057/commits/cd2f2865d35dfd77624dd3a38ed32822e895539d 这是我配置的: ApplicationProperties.java: CacheConfigur

  • 问题内容: 我正在尝试找出如何阻止 DOM 元素以角度限制来自合并范围的数据。 我知道您可以使用if语句和所有方法来执行此操作,但是是否有一种真正而永久的方法来停止以角度绑定元素但保留添加的内容? 所以说我有这个 我更改了模型,以便div更改为此。 然后,我单击将其解除绑定的按钮,因此,如果将模型更改为,则不需要与以前相同。这个 我知道还有许多其他方法可以执行此操作,但是我不知道要真正地解除绑定元

  • 问题内容: 我在“ tx:annotation-driven”行上收到上述错误,但是我在Bean文件的顶部声明了名称空间,为什么以下XML导致此错误? 问题答案: 就像其他xmlns:定义一样,您需要一个xmlns:tx

  • 本文向大家介绍aurelia 绑定到选择元素,包括了aurelia 绑定到选择元素的使用技巧和注意事项,需要的朋友参考一下 示例 字符串数组 在选择下拉列表中选择一个值并提供字符串数组时,所选值将作为字符串绑定到选择元素的value属性,我们可以使用字符串插值显示该字符串。 对象数组 与上面的示例不同,当提供对象数组时,在下拉列表中选择一个值时,绑定到该特定选项的模型就是所提供的对象。      

  • 英文原文:http://emberjs.com/guides/templates/binding-element-attributes/ 除了普通文本,你可能也希望在模板中包含可以将其属性绑定到控制器的HTML元素。 例如,想象一下你的控制器中包含这样一个属性,它包含指向一幅图像的URL地址: 1 2 3 <div id="logo"> <img {{bind-attr src=logoUr