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

如何对记录使用@ConfigurationProperties?

拓拔稳
2023-03-14

Java16引入了记录,这有助于在编写携带不可变数据的类时减少样板代码。当我尝试将记录用作@ConfigurationPropertiesbean时,我得到以下错误消息:

@ConfigurationProperties("demo")
public record MyConfigurationProperties(
        String myProperty
) {
}
***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.example.demo.MyConfigurationProperties required a bean of type 'java.lang.String' that could not be found.

如何将记录用作@ConfigurationProperties

共有2个答案

郭意
2023-03-14

如果需要以编程方式声明默认值:

@ConfigurationProperties("demo")
public record MyConfigurationProperties(String myProperty) { 
    
    @ConstructorBinding
    public MyConfigurationProperties(String myProperty) {
        this.myProperty = Optional.ofNullable(myProperty).orElse("default");
    }
}

java.util.可选属性:

@ConfigurationProperties("demo")
public record MyConfigurationProperties(Optional<String> myProperty) {

    @ConstructorBinding
    public MyConfigurationProperties(String myProperty) {
        this(Optional.ofNullable(myProperty));
    }
}

@已验证java。util。组合中的可选

@Validated
@ConfigurationProperties("demo")
public record MyConfigurationProperties(@NotBlank String myRequiredProperty,
                                        Optional<String> myProperty) {

    @ConstructorBinding
    public MyConfigurationProperties(String myRequiredProperty, 
                                     String myProperty) {
        this(myRequiredProperty, Optional.ofNullable(myProperty));
    }
}

基于此Spring Boot问题。

梁丘成和
2023-03-14

回答我自己的问题。

上面的错误是由于SpringBoot由于缺少无参数构造函数而无法构造bean引起的。记录隐式声明一个构造函数,每个成员都有一个参数。

Spring Boot允许我们使用@ConstructorBinding注释来启用构造函数而不是setter方法的属性绑定(如文档和这个问题的答案中所述)。这也适用于记录,所以这是有效的:

@ConfigurationProperties("demo")
@ConstructorBinding
public record MyConfigurationProperties(
        String myProperty
) {
}

更新:从Spring Boot 2.6开始,当记录有一个单独的构造函数时,不再需要使用开箱即用的记录和@构造绑定。请参阅发行说明。

 类似资料:
  • 我有一个基于Spring boot sleuth的应用程序。一切正常。我现在有这样的日志: 现在,我想将自定义MDC添加到我的日志中,例如合同引用。我想要这样的日志: 我尝试了各种方法,但都没有成功: 使用Spring Sleuth Tracer添加标签; 使用MDC. put(xxx, xxx)将logging.pattern.level=%5p%mdc添加到我的application.prop

  • 问题内容: 我有下面的代码删除mysql记录,我想对其进行转换,因此它将是ajax / jquery代码,因此从表中删除记录后,我可以留在同一页上。现在,它工作正常,但不在同一页面上,我需要刷新页面以查看结果。这只是完整代码的一部分。所有代码都在一页上。 问题答案: Delete 现在在本节中写下 现在在“ delete_page.php”页面中执行此操作 休息,我希望你知道。希望这可以帮助

  • 我在测试中有一段代码,使用Hamcrest 2.2检查结果列表是否包含某些属性: 当是一个普通的类时,这个工作非常好。但是在我将它更改为之后,Hamcrest的抱怨没有名为的属性: 是否有其他匹配器可以用来实现与之前相同的匹配?或者其他解决方法可以用来让它与记录一起工作?

  • 本文向大家介绍如何使用MySQL LIMIT订购记录并获取一些记录?,包括了如何使用MySQL LIMIT订购记录并获取一些记录?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是查询以选择MySQL中的最后n行。在这里,我们首先在ASC中对其进行排序,并显示前4条记录- 这将产生

  • 我下载了kafka-clients-0.9.0.0。jar与maven一起使用,我希望我会看到类似于Kafka日志链接中的日志记录 然而,我不知道为什么我没有得到任何日志记录,即使我设置了引导。purpuse上的服务器错误,但它只是在没有发出任何警告的情况下被卡住了。我添加了几行代码以使用log4j打印到一个文件中,这似乎是可行的,但不知道为什么Kafka不能将事件记录到log4j中。 请注意,s

  • 问题内容: 我试图弄清楚如何从由分隔的多行记录中提取特定字段。 在这种情况下,它恰巧是从apt-cache类似于DEBIAN控制文件输出的。查看输出 我想要的输出是格式中的每条记录一行。基本上是可用软件包的安装命令列表… 到目前为止,我所拥有的是 这是实际输出: 是所需的,但似乎只是a幸,因为在此示例中字段的顺序是一致的。如果字段的顺序不同,则会中断。 我可以在Python中使用面向对象来进行此类