Kotlin Data класс - PullRequest
       2

Kotlin Data класс

0 голосов
/ 26 марта 2019

У меня ниже POJO в Java, который используется в загрузочном приложении 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. Ценю вашу помощь.

1 Ответ

5 голосов
/ 26 марта 2019

Класс 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...