在spring加载属性文件

我们的一个团队以这种方式实现了加载属性(请参阅下面的伪代码),并建议这种方法是正确的,因为使用它的客户端应用程序可以自由地将属性保存在任何文件中。 与广泛使用的propertyplaceholderconfigurer相反。

应用程序的context.xml

    

config.properties

 com.myapp.myproperty1=data.xml 

编辑:我应该添加它是data.properties而不是data.xml。 我们要加载一个属性文件(这个属性文件在config.properties中作为“属性”给出.com.myapp.myproperty1 = data.properties

java类

 import org.springframework.core.io.Resource; public class Myclass { private Resource xmlField; // setter & getter methods.. } 

使用spring core.io.Resource是对的吗?

另一个原因是客户端应用程序想要加载特定于环境的配置。 我建议使用propertyconfigurer并使用maven配置文件生成特定于环境的构建

你能告诉哪一个适合哪种情况? 如果它在不同情况下有所不同,请帮助我指出它们?

谢谢

您可以将属性放在任何文件中,仍然使用PropertyPlaceholderConfigurer 。 这是一个满足您同事关注点和您对环境特定内容的渴望的示例:

     classpath:MyCompany.properties  classpath:MyCompany.${mycompany.env:dev}.properties  classpath:${mycoworker}  file:///${user.home}/MyCompany.properties        

如果传入no -D参数,那么您将获取以下属性文件,其中后面文件中的属性会覆盖先前确定的值。

  1. MyCompany.properties离开类路径
  2. MyCompany.dev.properties离开类路径
  3. $ HOME / MyCompany.properties(如果存在)

要在#2的生产配置中交换,只需将-Dmycompany.env=prod传递给java。 同样,如果他/她想要,你的同事可以传递-Dmycoworker=/some/path/config.properties

我不确定为什么PropertyPlaceholderConfigurator不是正确的选择。

我几乎总是通过定制的PPC处理特定于环境的配置,它可以(a)在启动时获得-D参数,和/或(b)使用机器名称来决定加载哪个属性文件。

对我来说,这比通过Maven捆绑信息更方便,因为我可以更轻松地从我所使用的任何机器上测试任意配置(使用-D属性)。

给戴夫的建议+1。 您应该使用PropertyPlaceholderConfigurer来加载\读取属性。 如果你想知道如何使用这个,我就是从我之前的项目中抽出的例子。 此示例用于加载多个属性文件,但概念相同。 祝你好运。

    classpath:config.properties