gpt4 book ai didi

java - 同时使用多个 Spring PropertyPlaceholderConfigurer

转载 作者:搜寻专家 更新时间:2023-11-01 01:08:11 24 4
gpt4 key购买 nike

我有两个项目,其中一个(服务)包含第二个(核心)。我在下面的核心项目中定义了这个 PropertyPlaceholderConfigurer:

<bean id="propertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:appConfig.properties</value>
</list>
</property>
</bean>

而且我想扩展上层工程中的Core占位符,包括appConfig.properties等。我发现的唯一方法是在上层定义另一个不同的 bean(不同的 ID)并包含新的:

<bean id="servicesPropertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:swagger.properties</value>
</list>
</property>
</bean>

但它会导致找不到 appConfig.properties,我猜它只是同时使用了这些 PropertyPlaceholderConfigurer 之一?是否需要在上层propertyConfigurer中指定所有资源?:

<bean id="servicesPropertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:swagger.properties</value>
<value>classpath:appConfig.properties</value>
</list>
</property>
</bean>

是否可以扩展核心 bean 或同时使用两者?

最佳答案

您可以同时使用多个但是您必须为每个其他名称/ID 使用不同的名称/ID,一个将覆盖另一个。接下来,您需要为每个使用不同的占位符 (${...}) 或将其配置为忽略未解析的占位符。

我强烈建议您不要使用类定义,而是使用命名空间(<context:property-placeholder .. />,它可以为您节省一些 xml。(它将生成具有唯一名称的 bean,因此您可以同时拥有多个,请确保将 ignore-unresolvable 属性设置为true

作为最后的手段,你可以实现你的 a BeanDefinitionRegistryPostProcessor,它检测所有 PropertyPlaceHolderConfigurer 实例,将它们合并为一个并将所有位置/资源移动到合并的一个。这样您就不必担心多个不同的占位符或无法解析的属性。

关于java - 同时使用多个 Spring PropertyPlaceholderConfigurer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18697050/

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