Не удается заставить `ConfigurationProperties` работать правильно - PullRequest
0 голосов
/ 07 марта 2019

В моем приложении Spring Boot на базе Kotlin я хотел бы использовать @ConfigurationProperties для доступа к некоторой конфигурации из моего файла application.yml. Однако до сих пор экземпляр, похоже, не инициализируется значениями из конфигурации. Вот что у меня есть:

@Profile("create-accounts")
@Component
class InitialAccountsCreator {
    @Autowired
    lateinit var accountConfig: AccountsConfiguration
    val logger = loggerFor<InitialAccountsCreator>()

    @PostConstruct
    fun createAccounts() {
        // This will print 0
        logger.warn("CONFIGURED ACCOUNTS: ${accountConfig.keys.size}");
    }
}

@ConfigurationProperties("accounts")
class AccountsConfiguration {
    lateinit var keys: MutableList<Account>
    class Account {
        lateinit var id: String,
        lateinit var name: String
    }
}

Я добавил аннотацию к своему Application:

@EnableConfigurationProperties(AccountsConfiguration::class)

Конфигурация выглядит так:

accounts:
  keys:
    - id: foo
      name: Bar

Начиная с отладки, кажется, что Spring даже не пытается вставить значения в экземпляр.

Я также уже пытался добавить плагин kapt, на который есть ссылка в Kotlin с Spring Boot 2.0 @ConfigurationProperties не работает :

diff --git a/webapp/build.gradle b/webapp/build.gradle
index faef149..6400bed 100644
--- a/webapp/build.gradle
+++ b/webapp/build.gradle
@@ -25,6 +25,7 @@ apply plugin: 'kotlin-spring'
 apply plugin: 'org.springframework.boot'
 apply plugin: 'io.spring.dependency-management'
 apply plugin: 'idea'
+apply plugin: 'kotlin-kapt'

 sourceSets {
     main {
@@ -105,6 +106,9 @@ dependencies {
         exclude module: 'spring-boot-starter-logging'
     }

+
+    kapt "org.springframework.boot:spring-boot-configuration-processor"
+    optional "org.springframework.boot:spring-boot-configuration-processor"
 }

 task integrationTest(type: Test) {

1 Ответ

0 голосов
/ 12 марта 2019
lateinit var keys: MutableList<Account>

не будет работать.вместо этого используйте

var keys = mutableListOf<Account>()
...