【问题标题】:Kotlin Data classKotlin 数据类
【发布时间】:2019-08-16 20:43:49
【问题描述】:

我在 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 注入的。感谢您的帮助。

【问题讨论】:

标签: kotlin


【解决方案1】:

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注解。

【讨论】:

  • 谢谢@Madhu Bhat
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多