gpt4 book ai didi

java - 如何从 PropertyPlaceholderConfigurer 获取前缀为 'abc.' 的所有属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:33 26 4
gpt4 key购买 nike

在 spring 上下文文件中,我使用 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 加载几个配置文件:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>a.properties</value>
<value>b.properties</value>
<value>c.properties</value>
</list>
</property>
</bean>

a.propertiesb.propertiesc.propertes 可能有一些前缀为 abc 的 hibernate 配置。 :

abc.hibernate.show_sql=true
abc.hibernate.default_schema=myschema
abc.hibernate.xxx=xxx
abc.hibernate.xxx=xxx
abc.hibernate.xxx=xxx
abc.hibernate.xxx=xxx
abc.hibernate.xxx=xxx
abc.hibernate.xxx=xxx

现在我想定义一个 hibernate session 工厂:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<util:properties>
<prop key="hibernate.show_sql">${abc.hibernate.show_sql}</prop>
<prop key="hibernate.xxx">${abc.hibernate.xxx}</prop>
<prop key="hibernate.xxx">${abc.hibernate.xxx}</prop>
<prop key="hibernate.xxx">${abc.hibernate.xxx}</prop>
<prop key="hibernate.xxx">${abc.hibernate.xxx}</prop>
<prop key="hibernate.xxx">${abc.hibernate.xxx}</prop>
</util:properties>
</property>
</bean>

你可以看到我必须一次又一次地在 bean 声明中写入属性:

<prop key="hibernate.xxx">${abc.hibernate.xxx}</prop>

有什么方法可以告诉 spring 获取所有前缀为 abc. 的属性?

所以我可以写:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<something prefix="abc" /> <!-- TODO -->
</property>
</bean>

是否可能或者是否有任何其他简单的解决方案?

最佳答案

您可以使用类似于以下类的东西来扩展 java.util.Properties:

import java.util.Enumeration;
import java.util.Properties;

public class PrefixedProperties extends Properties {
public PrefixedProperties(Properties props, String prefix){
if(props == null){
return;
}

Enumeration<String> en = (Enumeration<String>) props.propertyNames();
while(en.hasMoreElements()){
String propName = en.nextElement();
String propValue = props.getProperty(propName);

if(propName.startsWith(prefix)){
String key = propName.substring(prefix.length());
setProperty(key, propValue);
}
}
}
}

然后你可以定义sessionFactory如下:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<bean id="sessionFactoryProperties" class="PrefixedProperties">
<constructor-arg ref="props"/> <!-- reference to all properties -->
<constructor-arg value="abc.hibernate."/> <!-- prefix -->
</bean>
</property>
</bean>

我看不到任何其他过滤属性的可能性。

关于java - 如何从 PropertyPlaceholderConfigurer 获取前缀为 'abc.' 的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20796882/

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