Kotlin spring-boot @ConfigurationProperties

我正在尝试创建以下bean AmazonDynamoDBAsyncClientProvider 。 我有application.properties定义endpointtablePrefix ,我试图注入使用@ConfigurationProperties

以下是相同的代码片段。 当我运行我的春季启动应用程序不起作用。

我已经尝试使用一个普通的java类来做相同的ConfigurationProperties类,它不会设置这些属性,但是当涉及到AmazonDynamoDBAsyncClientProvider ,属性是空的。 我在这里错过了什么?

 @Component open class AmazonDynamoDBAsyncClientProvider @Autowired constructor(val dynamoDBConfiguration: DynamoDBConfig){ @Bean open fun getAmazonDBAsync() = AmazonDynamoDBAsyncClientBuilder.standard() .withEndpointConfiguration( AwsClientBuilder.EndpointConfiguration(dynamoDBConfiguration.endpoint, dynamoDBConfiguration.prefix)) .build() } 

这里是我试图用配置自动装配的kotlin bean

 @Component @ConfigurationProperties(value = "dynamo") open class DynamoDBConfig(var endpoint: String="", var prefix: String="") 

最后继承了常规的java bean,它使用ConfigurationProperties填充,但是当它获得Autowired时,我看到这些属性为空/ null

 @Component @ConfigurationProperties("dynamo") public class DynamoDBConfiguration { private String endpoint; private String tablePrefix; public String getEndpoint() { return endpoint; } public void setEndpoint(String endpoint) { this.endpoint = endpoint; } public String getTablePrefix() { return tablePrefix; } public void setTablePrefix(String tablePrefix) { this.tablePrefix = tablePrefix; } } 

你有没有尝试摆脱你的ConfigurationProperties类的@Component注释?

这是我用Kotlin和Spring做的,希望能帮上忙。

我正在试图利用kotlin-spring和kotlin-allopen gradle插件

 dependencies { classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlinVersion" classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion" } apply plugin: 'kotlin-spring' apply plugin: 'kotlin-noarg' noArg { annotation("your.noarg.annotation.package.NoArg") } 

他们确实使kotlin春季发展更容易。

 @ConfigurationProperties("dynamo") @NoArg data class DynamoDBConfiguration(var endpoint: String, var prefix: String)