Java16引入了记录,这有助于在编写携带不可变数据的类时减少样板代码。当我尝试将记录用作@ConfigurationProperties
bean时,我得到以下错误消息:
@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
?
如果需要以编程方式声明默认值:
@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问题。
回答我自己的问题。
上面的错误是由于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中使用面向对象来进行此类