您好,我想看看从 2.7.3 迁移到 3.0.0 后可能出现什么问题 - 我的目标是准备本机应用程序。因此,我了解到可能存在一些问题,@ConditionalOnProperty
或者@ConditionalOnBean
- 我仍然不明白为什么,但好吧 - 想检查一下。我创建了示例项目,由 spring initializr 生成,您可以在那里找到它(spring boot 版本2.7.3
,要查看您需要切换到的问题3.0.0
)
https://github.com/Azbesciak/spring-3-configuration-prop-issue
问题出在以下代码中,它在 2.7.3 中有效
@ConfigurationProperties("my-service")
@ConditionalOnProperty("my-service", havingValue = "c")
@Component
data class SomeBean(var customValue: String = "not set")
但在 3.0.0 中却没有
java.lang.IllegalStateException: Cannot bind @ConfigurationProperties for bean 'someBean'. Ensure that @ConstructorBinding has not been applied to regular bean
我最初尝试使用@Bean
服务,如下所示
@ConfigurationProperties("my-service")
data class SomeBean(var customValue: String = "not set")
@Configuration
class MyConfig {
@Bean
@ConditionalOnProperty("my-service", havingValue = "c")
fun someBean() = SomeBean()
}
但它失败了,没有错误,属性也没有设置。
顺便说一句,我以为这应该可行
data class SomeBean(var customValue: String = "not set")
@Configuration
@EnableConfigurationProperties
class MyConfig {
@Bean
@ConditionalOnProperty("my-service", havingValue = "c")
@ConfigurationProperties("my-service")
fun someBean() = SomeBean()
}
但仅当我将 中的属性名称更改@ConfigurationProperties
为超出范围时才会发生这种情况my-service
(my-service.value
或者xyz
在 中有效2.7.3
,在 中3.0.0
无效)
我看到了https://github.com/spring-projects/spring-boot/issues/33471,但不确定是否属实。也许我错过了什么?在https://github.com/spring-projects-experimental/spring-native/issues/1679中,您发表了一个声明,基于此,我认为在 3.0.0 中一切都会毫不费力地运行。那么...这是一个错误还是一个功能?