从外部war文件加载常量

时间:2012-01-30 12:06:48

标签: spring

我正在使用spring mvc项目,因为常量不同于开发环境和生产环境。如何在spring中提供常规文件以外的常量文件或根据环境提供常量的任何替代方法

3 个答案:

答案 0 :(得分:1)

如果常量取决于环境,那么我更喜欢将它们放在Application Server Context中。

例如,如果您将此代码段放在tomcat context.xml(或特定于应用程序的上下文文件)中

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    ...
    <Parameter name="myConfig" value="123" override="false" />
</Context>

然后您可以像使用任何其他配置参数一样在Spring中使用参数myConfig

<bean class="Demo">
   <property name="config" value="${myConfig}"/>
</bean>

答案 1 :(得分:1)

我不建议使用Container的Context,因为它将你的webapp耦合到特定的容器提供者(上下文params不是标准化的,不是吗?)。

我在这种情况下使用的是以下解决方案:

  1. 定义Spring的Property Placeholder(请参阅reference
  2. 使用所有必需的配置(或多个文件)创建文件,例如:config.properties
  3. 定义并导出外部环境变量并将其指向某个配置目录,例如:export MY_CONFIG=/usr/share/myapp在两种环境中执行此操作(执行目录可能会更改)。但是你的配置在这个目录中。
  4. 在属性占位符中使用$(env.MY_CONFIG},以在Spring中加载属性。
  5. 这样,您将有两种不同的配置设置用于开发和实时环境。简单但功能强大,因为您可以在CVS中使用此配置,甚至可以使用一些资源重载来使其更加灵活。

答案 2 :(得分:0)

我更喜欢使用PropertyPlaceholderConfigurers (docs)。自定义版本可以通过-Doption.foo.bar=xxx开关基于各种事物(如服务器和/或用户名)和/或命令行java选项来解析属性文件。

由于多种原因,我更倾向于使用上下文变量,主要是为了(a)保持服务器中立的配置更改,以及(b)允许在没有服务器干预的情况下“按需”切换配置。