我在Java中有下面的POJO,它在Spring启动应用中用于在应用启动期间从YML注入属性。尝试将应用程序转换为Kotlin
,但是当我将POJO转换为数据类时,我很难实现注入的值。
@Component
@ConfigurationProperties("rest")
@Data
public class RestProperties {
private final Client client = new Client();
@Data
public static class Client {
private int defaultMaxTotalConnections;
private int defaultMaxConnectionsPerRoute;
private int defaultReadTimeout;
}
}
我已经尝试过以下解决方案,但是没有用。
@Component
@ConfigurationProperties("rest")
class RestProperties {
val client = Client()
class Client() {
constructor(
defaultMaxTotalConnections: Int,
defaultMaxConnectionsPerRoute: Int,
defaultReadTimeout: Int
) : this()
}
}
@Component
@ConfigurationProperties("rest")
class RestProperties {
val client = Client()
class Client {
var defaultMaxTotalConnections: Int = 50
set(defaultMaxTotalConnections) {
field = this.defaultMaxTotalConnections
}
var defaultMaxConnectionsPerRoute: Int = 10
set(defaultMaxConnectionsPerRoute) {
field = this.defaultMaxConnectionsPerRoute
}
var defaultReadTimeout: Int = 15000
set(defaultReadTimeout) {
field = this.defaultReadTimeout
}
}
}
第二个代码有效,但是值不是从YML注入的。感谢您的帮助。
答案 0 :(得分:5)
可以将RestProperties
类转换为Kotlin,如下所示:
@Component
@ConfigurationProperties("rest")
class RestProperties {
val client: Client = Client()
class Client {
var defaultMaxTotalConnections: Int = 0
var defaultMaxConnectionsPerRoute: Int = 0
var defaultReadTimeout: Int = 0
}
}
请注意,必须按照以下说明在application.yml
中添加属性,才能正确注入。
rest:
client:
defaultMaxTotalConnections: 1
defaultMaxConnectionsPerRoute: 2
defaultReadTimeout: 3
此外,此类提供配置的类通常应使用@Configuration
而非@Component
进行注释。