繁体   English   中英

Kotlin spring-boot @ConfigurationProperties

[英]Kotlin spring-boot @ConfigurationProperties

我正在尝试创建以下 bean AmazonDynamoDBAsyncClientProvider 我有定义endpointtablePrefix ,我试图使用@ConfigurationProperties注入它们

以下是相同的代码片段。 当我运行 spring-boot 应用程序时,它不起作用。

我已经尝试使用常规 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时,我看到这些属性为空/空

@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 的 Spring 开发变得更加容易。

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

我试过你的配置类,它被填充了。 我认为您的错误在于您尝试创建 bean 的方式,该函数需要在用@Configuration注释的类中,这应该有效:

@Configuration
class Beans {
    @Bean
    fun getAmazonDBAsync(config: DynamoDBConfiguration) = 
        AmazonDynamoDBAsyncClientBuilder.standard()
        .withEndpointConfiguration(
            AwsClientBuilder.EndpointConfiguration(config.endpoint, config.prefix)
        )
        .build()
}

Spring 会为你注入配置,只要你像上面那样用@Component注释配置。

我有一个类似的问题,并以这种方式修复它:

我使用lateinit vars 定义了配置属性class

@ConfigurationProperties(prefix = "app")
open class ApplicationConfigProperties {
     lateinit var publicUrl: String
}

然后在我的spring boot应用中配置了一个bean:

@SpringBootApplication
open class Application {
     @Bean open fun appConfigProperties() = ApplicationConfigProperties()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM