java - Spring boot 配置和配置属性的问题
问题描述
我有一个像下面这样的课
@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
两者不能同时应用于一个类型。但是,您可以通过以下两种方式实现您的目标
@ConfigurationProperties
在课堂@Bean
上使用@Configuration
application.properties
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
CircuitBreaker
public class CircuitBreaker {
private int connectionTimeout;
private String clientId;
// no-args constructor
// getters/setters
}
CircuitBreakerConfiguration
@Configuration
public class CircuitBreakerConfiguration {
@Bean
@ConfigurationProperties(prefix = "config.circuit-breaker")
public CircuitBreaker circuitBreaker() {
return new CircuitBreaker();
}
}
分开@ConfigurationProperties
&@Configuration
application.properties
config.circuit-breaker.connection-timeout=2000
config.circuit-breaker.clientId=clientId
CircuitBreakerConfigurationProperties
@ConfigurationProperties(prefix = "config.circuit-breaker")
public class CircuitBreakerConfigurationProperties {
private int connectionTimeout;
private String clientId;
// no-args constructor
// getters/setters
}
CircuitBreaker
public class CircuitBreaker {
private int connectionTimeout;
private String clientId;
// no-args constructor
// getters/setters
}
CircuitBreakerConfiguration
@Configuration
public class CircuitBreakerConfiguration {
@Bean
public CircuitBreaker circuitBreaker(
CircuitBreakerConfigurationProperties circuitBreakerConfigurationProperties) {
final CircuitBreaker circuitBreaker = new CircuitBreaker();
circuitBreaker.setClientId(circuitBreakerConfigurationProperties.getClientId());
circuitBreaker
.setConnectionTimeout(circuitBreakerConfigurationProperties.getConnectionTimeout());
return circuitBreaker;
}
}
推荐阅读
- jboss - NameNotFoundException 与 jboss 到 Wildfly 服务器迁移
- java - 在链表Java中插入一个位置
- python - 我需要帮助编写一个程序,该程序使用嵌套循环打印出彼此相邻的两个形状
- api - .Net 5.0 API 和让我们加密“无法建立 SSL 连接,请参阅内部异常。”
- android-alertdialog - 我可以区分jetpack compose中alertdialog的这两个解除操作吗?
- java - 我应该添加哪些依赖项以使用 Java SDK 使用 Oracel 对象存储
- reactjs - 从 Firebase.Auth (React, Firebase) 保存登录到 LocalStorge
- python - Django REST framework on primary key
- android - 如何在 Xamarin 表单中的视图模型之间最好地传递信息 - Prism
- reactjs - reactjs:仅当为真时才映射名称