我们的一个团队已经以这种方式实现了加载属性(请参见下面的伪代码),并建议这种方法是正确的,因为使用这种方法的客户端应用程序可以自由地将属性保留在任何文件中。与广泛使用的 propertyplaceholderconfigurer 相反。
应用程序上下文.xml
<bean class="com.mypackage.Myclass">
<property name="xml" value="classpath:"{com.myapp.myproperty1}"> </property>
</bean>
配置属性
com.myapp.myproperty1=data.xml
编辑:我应该添加它是 data.properties 而不是 data.xml。我们想要加载一个属性文件(该属性文件在 config.properties 中作为“属性”给出。
com.myapp.myproperty1=数据.properties
java类
import org.springframework.core.io.Resource;
public class Myclass {
private Resource xmlField;
// setter & getter methods..
}
使用 spring core.io.Resource 是否正确?
另一个原因是客户端应用程序想要加载特定于环境的配置。我建议使用 propertyconfigurer 并使用 Maven 配置文件来生成特定于环境的构建
您能建议哪种情况适合哪种情况吗?如果不同场景下有不同,请帮我指出?
thanks
您可以将属性放入任何文件中并仍然使用PropertyPlaceholderConfigurer
。这是一个既满足您同事的担忧又满足您对环境特定内容的需求的示例:
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- default settings -->
<value>classpath:MyCompany.properties</value>
<!-- environment-specific settings -->
<value>classpath:MyCompany.${mycompany.env:dev}.properties</value>
<!-- keep your coworker happy -->
<value>classpath:${mycoworker}</value>
<!-- allows emergency reconfiguration via the local file system -->
<value>file:///${user.home}/MyCompany.properties</value>
</list>
</property>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="ignoreResourceNotFound" value="true" />
<!-- should be validated separately, in case users of the library load additional properties -->
<property name="ignoreUnresolvablePlaceholders" value="false"/>
</bean>
如果你传入 no-D
参数,然后您将选择以下属性文件,其中后面的文件中的属性将覆盖之前确定的值。
- MyCompany.properties 离开类路径
- MyCompany.dev.properties 离开类路径
- $HOME/MyCompany.properties(如果存在)
要交换 #2 的生产配置,只需传递-Dmycompany.env=prod
到爪哇。同样,你的同事也可以通过-Dmycoworker=/some/path/config.properties
如果他/她愿意的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)