Java Spring引导配置和配置属性存在问题
我有一个像下面这样的班级Java Spring引导配置和配置属性存在问题,java,spring-boot,kotlin,Java,Spring Boot,Kotlin,我有一个像下面这样的班级 @Configuration @ConfigurationProperties(prefix = "myConfig") class MyConfig { lateinit var baseUrl: String var connectionTimeout: Int = 2000 var defaultMaxHotels: Int = 10000 var clientId: String = "my-domain" var app
@Configuration
@ConfigurationProperties(prefix = "myConfig")
class MyConfig {
lateinit var baseUrl: String
var connectionTimeout: Int = 2000
var defaultMaxHotels: Int = 10000
var clientId: String = "my-domain"
var applicationId: String = "my-app"
var failureRateThreshold: Float = 20f
var windowSize: Int = 100
var minNumberOfCalls: Int = 100
var waitDurationInOpenState: Long = 30_000
@Bean
fun myCircuitBreaker(): CircuitBreaker {
var configuration = CircuitBreakerConfig.custom().failureRateThreshold(failureRateThreshold)
.slidingWindow(windowSize, minNumberOfCalls, CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
.waitDurationInOpenState(Duration.ofMillis(waitDurationInOpenState))
.enableAutomaticTransitionFromOpenToHalfOpen()
.build()
val registry = CircuitBreakerRegistry.of(configuration)
return registry.circuitBreaker("my-cb")
}
当我启动应用程序时,它会给出一个错误
An exception occurred while running. null: InvocationTargetException: Found @Configuration and @ConfigurationProperties on com.my.api.config.client.MyConfig.
请帮助我解决此问题。
@Configuration
&@ConfigurationProperties
两者不能同时应用于一个类型。但是,您可以通过以下两种方式实现您的目标
在@Configuration
类中的@Bean
上使用@ConfigurationProperties
application.properties
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
断路器
公共级断路器{
专用int连接超时;
私有字符串clientId;
//无参数构造函数
//能手/二传手
}
断路器配置
@配置
公共类断路器配置{
@豆子
@配置属性(前缀=“配置断路器”)
公共断路器{
返回新断路器();
}
}
单独的@ConfigurationProperties
和@Configuration
application.properties
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
断路器配置属性
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
@ConfigurationProperties(前缀=“配置断路器”)
公共类断路器配置属性{
专用int连接超时;
私有字符串clientId;
//无参数构造函数
//能手/二传手
}
断路器
公共级断路器{
专用int连接超时;
私有字符串clientId;
//无参数构造函数
//能手/二传手
}
断路器配置
@配置
公共类断路器配置{
@豆子
公用断路器(
电路断路器配置属性电路断路器配置属性){
最终断路器=新断路器();
断路器.setClientId(断路器配置属性.getClientId());
断路器
.setConnectionTimeout(CircuitBreakerConfiguration属性.getConnectionTimeout());
回路断路器;
}
}
尝试将您的@Configuration
与@ConfigurationProperties
分开。我希望将两者都放在一个文件中。我可以通过将spring boot starter父版本从2.2.0.M3更改为2.2.0.RC1来实现这一点。