我正在尝试创建以下bean AmazonDynamoDBAsyncClientProvider
。我的application.properties定义了endpoint
和tablePrefix
,我试图使用@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="")
最后继续使用ConfigurationProperties
填充的常规java bean,但是当它获得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;
}
}
答案 0 :(得分:2)
您是否尝试过删除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)
答案 1 :(得分:0)
我尝试了您的配置类,并填充了它。我认为您的错误是您尝试创建Bean的方式,该功能必须位于带有@Configuration
注释的类中,这应该可以工作:
@Configuration
class Beans {
@Bean
fun getAmazonDBAsync(config: DynamoDBConfiguration) =
AmazonDynamoDBAsyncClientBuilder.standard()
.withEndpointConfiguration(
AwsClientBuilder.EndpointConfiguration(config.endpoint, config.prefix)
)
.build()
}
只要您使用@Component
注释配置,Spring就会像上面一样为您注入配置。
答案 2 :(得分:0)
我遇到了类似的问题,并通过以下方式解决了这个问题:
我用class
变量定义了配置属性lateinit
:
@ConfigurationProperties(prefix = "app")
open class ApplicationConfigProperties {
lateinit var publicUrl: String
}
然后在我的spring boot应用程序中配置一个bean:
@SpringBootApplication
open class Application {
@Bean open fun appConfigProperties() = ApplicationConfigProperties()
}