You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3中用Kotlin实现无默认值的@ConfigurationProperties

Kotlin Spring Boot 3.1.0 配置类移除默认值的正确姿势

你的错误点分析

1. @ConstructorBinding 注解使用错误

Spring Boot 3.x 版本中,@ConstructorBinding 注解不能作用在类上,只能用于构造函数。而且对于 Kotlin 的 data class 来说,如果属性用 val 声明(不可变),Spring Boot 3.x 会自动启用构造函数绑定,完全不需要额外添加 @ConstructorBinding 注解。你之前把注解加在类上,才会触发编译错误。

2. lateinit 关键字使用错误

lateinit 只能修饰 var 类型的变量(因为需要后续赋值),如果你用它修饰了 val,或者属性的访问修饰符导致 Kotlin 没有自动生成 getter/setter(比如用了 private),就会出现 Property getter or setter expected 的错误。Spring 的配置绑定要求属性必须具备可访问的 getter/setter,这是核心要求。

正确解决方案

方案一:构造函数绑定(推荐,不可变配置)

用 Kotlin data class 声明配置类,属性用 val 定义,配合 @ConfigurationProperties 即可,无需额外注解:

@ConfigurationProperties(prefix = "your.app")
data class AppProperties(
    val name: String,
    val version: String
)

然后在 Spring Boot 启动类上添加 @ConfigurationPropertiesScan 注解,让框架扫描到这个配置类;或者在启动类上用 @EnableConfigurationProperties(AppProperties::class) 显式启用该配置类。

方案二:可变属性 + lateinit(适合需要后续修改的场景)

如果需要配置属性可变,用 lateinit var 声明,确保属性是 public(默认就是),让 Kotlin 自动生成 getter/setter:

@ConfigurationProperties(prefix = "your.app")
class AppProperties {
    lateinit var name: String
    lateinit var version: String
}

同样需要通过 @ConfigurationPropertiesScan 或 @EnableConfigurationProperties 让框架识别这个类,也可以给类添加 @Component 注解(不推荐,因为外部化配置更适合单独管理)。

内容的提问来源于stack exchange,提问作者gstackoverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:53:19