В моем приложении 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) {