gpt4 book ai didi

java - Spring 占位符不解析 JavaConfig 中的属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:08 25 4
gpt4 key购买 nike

目前我有一个加载属性文件的 Spring xml 配置(Spring 4)。

上下文属性

my.app.service = myService
my.app.other = ${my.app.service}/sample

Spring xml配置

<bean id="contextProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound" value="true" />
<property name="fileEncoding" value="UTF-8" />
<property name="locations">
<list>
<value>classpath:context.properties</value>
</list>
</property>
</bean>
<bean id="placeholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" />
<property name="properties" ref="contextProperties" />
<property name="nullValue" value="@null" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>

Bean使用的属性

@Component
public class MyComponent {

@Value("${my.app.other}")
private String others;

}

这非常有效,others 值是 MyService/sample,异常(exception)情况。但是,当我尝试用 JavaConfig 替换此配置时,我组件中的 @Value 不会以相同的方式工作。该值不是 myService/sample 而是 ${my.app.service}/sample

@Configuration
@PropertySource(name="contextProperties", ignoreResourceNotFound=true, value={"classpath:context.properties"})
public class PropertiesConfiguration {

@Bean
public static PropertyPlaceholderConfigurer placeholder() throws IOException {
PropertyPlaceholderConfigurer placeholder = new PropertyPlaceholderConfigurer();
placeholder.setNullValue("@null");
placeholder.setSystemPropertiesMode(PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE);
return placeholder;
}

}

我是否遗漏了从 xml 到 Javaconfig 的转换?

ps :我还尝试实例化 PropertySourcesPlaceholderConfigurer 而不是 PropertyPlaceholderConfigurer 但没有成功。

最佳答案

更新以使用配置 PropertySourcesPlaceholderConfigurer。只有 @PropertySource 注释是不够的:

@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
return new PropertySourcesPlaceholderConfigurer();
}

@PropertySource 注解不会自动向 Spring 注册一个 PropertySourcesPlaceholderConfigurer。因此我们需要显式配置 PropertySourcesPlaceholderConfigurer

下面的 JIRA ticket 提供了有关此设计背后的基本原理的更多信息:

https://jira.spring.io/browse/SPR-8539

更新:创建简单的 Spring Boot 应用程序以使用嵌套属性。它在上述配置下运行良好。

https://github.com/mgooty/property-configurer/tree/master/complete

关于java - Spring 占位符不解析 JavaConfig 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29140794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com