首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有YamlPropertiesFactoryBean和Spring的属性占位符

问具有YamlPropertiesFactoryBean和Spring的属性占位符
EN

Stack Overflow用户
提问于 2018-12-07 13:17:55
回答 1查看 1.8K关注 0票数 0

我正在将一个小的“遗留”应用程序迁移到Spring,并在与YamlPropertiesFactoryBean结合使用属性占位符时遇到了问题。应用程序使用Spring配置。

我在项目中添加了一个Spring "main“,如下所示:

代码语言:javascript
复制
@SpringBootApplication
@ImportResource("classpath:spring-config.xml")
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

我已经把application.yaml放进/config了。它是由Spring获取的,我可以通过导入的Springconfig.xml中的bean声明中的属性替换(${some.prop})访问其中定义的属性。例如。

代码语言:javascript
复制
<bean id="myRouteBuilder" class="org.camelSpringBoot.test.MyRouteBuilder">
    <property name="someProp" value="${prop.from.application.yaml}"/>
</bean>

(除外)在使用org.springframework.beans.factory.config.YamlPropertiesFactoryBean读取额外的外部配置文件时除外:org.springframework.core.io.FileSystemResource构造函数arg中文件位置的属性无法解析:

代码语言:javascript
复制
<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
    <property name="resources">
        <list>
            <bean class="org.springframework.core.io.FileSystemResource">
                <constructor-arg value="${service.config.loc}" />
            </bean>
        </list>
    </property>
</bean>

收益率

java.io.FileNotFoundException:${service.config.loc}

如果我硬编码外部配置的位置,那么在外部YAML文件中使用的属性也不会被解析。

application.yaml:

代码语言:javascript
复制
security:
  keystore:
    loc:      /security/my.keystore

外部配置:

代码语言:javascript
复制
services:
  a:
    ssl:
      secret: ${security.keystore.loc}

java.lang.RuntimeException:无法打开密钥库/信任库${security.keystore.loc}

请注意,错误是关于逐字属性的。

与其他成功使用属性占位符的bean一样,YamlPropertiesFactoryBean实例是在spring-config.xml中声明的(意味着属性被它们的值替换)。为什么YamlPropertiesFactoryBean会失败?

是否可以为外部YAML文档启用占位符解析?

EN

回答 1

Stack Overflow用户

发布于 2018-12-07 13:25:25

我不知道你想做的事情是否奏效。属性解析是在完成BeanDefinition之后进行的,因此只能使用Spring,而不是像yaml文件那样的任意文件。

大多数构建工具(gradle,maven)都包含在构建时解析这些占位符的功能。那会不会是你的解决方案?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53670385

复制
相关文章

相似问题

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