首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin spring-boot @ConfigurationProperties

Kotlin spring-boot @ConfigurationProperties
EN

Stack Overflow用户
提问于 2017-05-25 11:24:25
回答 3查看 3.9K关注 0票数 2

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

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

我也尝试过使用常规的java类来做同样的ConfigurationProperties类,它设置了这些属性,但是当涉及到AmazonDynamoDBAsyncClientProvider时,这些属性是空的。这里我漏掉了什么?

代码语言:javascript
复制
@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

代码语言:javascript
复制
@Component
@ConfigurationProperties(value = "dynamo")
open class DynamoDBConfig(var endpoint: String="", var prefix: String="")

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

代码语言:javascript
复制
@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;
}
}
EN

回答 3

Stack Overflow用户

发布于 2017-07-25 17:51:03

你有没有试过在ConfigurationProperties类中去掉@Component注解?

以下是我对Kotlin和Spring所做的工作,希望对您有所帮助。

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

代码语言:javascript
复制
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开发变得容易得多。

代码语言:javascript
复制
@ConfigurationProperties("dynamo")
@NoArg
data class DynamoDBConfiguration(var endpoint: String, var prefix: String)
票数 2
EN

Stack Overflow用户

发布于 2018-12-19 14:29:20

我试过你的configuration类,它被填充了。我认为你的错误在于你试图创建bean的方式,函数需要在一个用@Configuration注释的类中,这应该是可行的:

代码语言:javascript
复制
@Configuration
class Beans {
    @Bean
    fun getAmazonDBAsync(config: DynamoDBConfiguration) = 
        AmazonDynamoDBAsyncClientBuilder.standard()
        .withEndpointConfiguration(
            AwsClientBuilder.EndpointConfiguration(config.endpoint, config.prefix)
        )
        .build()
}

Spring将为您注入配置,只要您像上面那样用@Component注释配置即可。

票数 0
EN

Stack Overflow用户

发布于 2020-01-15 22:05:03

我遇到了类似的问题,并这样解决了它:

我用lateinit变量定义了配置属性class

代码语言:javascript
复制
@ConfigurationProperties(prefix = "app")
open class ApplicationConfigProperties {
     lateinit var publicUrl: String
}

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

代码语言:javascript
复制
@SpringBootApplication
open class Application {
     @Bean open fun appConfigProperties() = ApplicationConfigProperties()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44171766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档