kotlin - Kotlin 数据类
问题描述
我在 java 中有以下 POJO,它在 Spring Boot 应用程序中用于在应用程序启动期间从 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 注入的。感谢你的帮助。
解决方案
该类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
.
推荐阅读
- c# - 添加拥有对象的集合
- django - Django 使用按钮渲染为 pdf
- elasticsearch - 按时间戳对对象进行排序
- javascript - 自定义 Javascript 缩略图滑块
- angular - createObjectUrl 不存在
- node.js - 错误:监听 EADDRNOTAVAIL:地址不可用 **.***.***.**:3004
- visual-studio - Visual Studio 2017 / MFC - 如何替换 CMDIChildWndEx 窗口以获得更现代的外观
- r - 根据给定条件改变多个变量
- sql - 从服务器到服务器的列数据传输
- javascript - 如何使用 Firebase 更新网页列表