Spring boot 如何在Spring Boot中插入自定义PropertySource提供的属性值?

Spring boot 如何在Spring Boot中插入自定义PropertySource提供的属性值?,spring-boot,kotlin,Spring Boot,Kotlin,我有我的自定义FooPropertySources,它扩展了EnumerablePropertySource。我将@Configuration类中的所有这些添加到ConfigurableEnvironment中,它们被应用程序正确地拾取,所有值都被解析 但是,如果某些值包含占位符,则不会对其进行插值。我想我应该使用propertySourcesplacePlaceholderConfigurer来解决这个问题,但是这个配置器似乎是用来处理bean中的占位符,而不是属性源中的占位符 到目前为止,我

我有我的自定义
FooPropertySource
s,它扩展了
EnumerablePropertySource
。我将
@Configuration
类中的所有这些添加到
ConfigurableEnvironment
中,它们被应用程序正确地拾取,所有值都被解析

但是,如果某些值包含占位符,则不会对其进行插值。我想我应该使用
propertySourcesplacePlaceholderConfigurer
来解决这个问题,但是这个配置器似乎是用来处理bean中的占位符,而不是属性源中的占位符

到目前为止,我试过:

@配置
@ConditionalOnProperty(“foo.config.import”)
开放类配置{
@自动连线
私有lateinit var env:ConfigurableEnvironment;
@值(\${foo.config.import})
私有lateinit变量locationSpecifier:String;
@施工后
私人娱乐初始化(){
val placeholderConfigurer=PropertySourcePlaceholderConfigurer();
val beanFactory=DefaultListableBeanFactory();
this.resolvePropertySources(this.parseLocationSpecifier())
.forEach(this.env.propertySources::addFirst);
占位符configurer.setEnvironment(this.env);
占位符配置器。后处理beanFactory(beanFactory);
}
内部fun resolvePropertySources(路径:path):设置{
//...
返回。。。;
}
内部parseLocationSpecifier():路径{
//...
返回路径;
}
}
现在,如果
FooPropertySource
的实例包含以下属性:

firstname = John
lastname = Doe
fullname = ${firstname} ${lastname}
最后,当我的应用程序调用
env.getProperty(“fullname”)
时,它将得到字符串
“johndoe”
,而不是
“${firstname}${lastname}”


有没有希望解决这个问题?我已经用了三天了…:-(

我想你可以创建一个扩展函数

fun ConfigurableEnvironment.fullname() = "${getProperty("firstname")} ${getProperty("lastname")}"

这些属性名只是示例,它们并不预先知道。它必须是更通用的机制。