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

Spring Boot+Kotlin中@ConfigurationProperties配置类注入失败求助

解决Spring Boot Kotlin数据类@ConfigurationProperties与@ConstructorBinding注入失败问题

问题原因

你的报错核心是:ApiConfiguration被Spring当成了普通Bean处理,而非配置属性类。虽然启动类加了@EnableConfigurationProperties(ApiConfiguration::class),但如果该类处于@SpringBootApplication默认的组件扫描路径下(同包或子包),Spring的@ComponentScan会优先把它识别为普通Bean,尝试通过构造函数注入String类型的依赖(这根本不存在),从而触发报错。

解决方案

方案1:添加@ConfigurationPropertiesScan注解(推荐)

在启动类上添加@ConfigurationPropertiesScan,明确告诉Spring扫描并识别配置属性类,避免被当成普通Bean处理。如果配置类和启动类同包,直接加注解即可;如果不在同包,指定basePackages参数:

@ConfigurationPropertiesScan // 同包下无需指定basePackages,跨包则添加basePackages = ["你的配置类所在包路径"]
@EnableConfigurationProperties(ApiConfiguration::class)
@SpringBootApplication
class SpringdemoApplication

fun main(args: Array<String>) {
    runApplication<SpringdemoApplication>(*args)
}

方案2:将配置类移出组件扫描范围

把ApiConfiguration放到@SpringBootApplication默认扫描路径之外的包中,这样@ComponentScan不会扫描到它,Spring会通过@EnableConfigurationProperties正确识别为配置属性类。

方案3:移除@ConstructorBinding(不推荐,仅作备选)

如果不需要构造函数绑定,可以改用Setter注入方式,将数据类的val改为var,并移除@ConstructorBinding:

@ConfigurationProperties("api")
data class ApiConfiguration(
    var clientId: String = "",
    var url: String = "",
    var key: String = ""
)

这种方式下,Spring会通过Setter自动绑定配置值,无需构造函数处理。

额外检查点

  • 确保ApiConfiguration上没有误加@Component或@Configuration注解,否则会强制Spring将其作为普通Bean处理。
  • 确认pom.xml或build.gradle中已经引入spring-boot-starter依赖(默认已包含配置属性处理逻辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:10:26