SpringNet从环境变量加载配置文件?

时间:2013-06-05 15:27:20

标签: c# spring

我在控制台应用程序中使用C#和Spring Net 1.3.2。

我得到了: 一个app.cfg 一个spring-context.xml 一个environnement.xml文件,它根据应用程序运行的位置包含特定的变量值:一个用于生产的文件夹,一个用于qa,一个用于测试。

我想要实现的目标: 在我的shell(windows)中,在使用foo.bat启动应用程序之前,我这样做: 设置环境=" qa"

当Spring加载上下文时,它会选择环境var(比如qa)中包含的值,并加载正确的文件:从而替换:configuration / {environment} /vars.xml

by configuration / qa / vars.xml。

在我的spring-context.xml文件中,我得到了这样的对象:value = $ {connectionString.DB1}"其中值在每个vars.xml文件中定义(记住,一个用于prod,一个用于qa ...)。

目前,我无法替换$ {environment}变量。所以我通过使用System.Environment.GetEnvironmentVariable(" environnement")获取$ {environment}的值来以编程方式完成它。并使用Path.Combine,自己加载两个上下文:

reader.LoadObjectDefinitions(envPath); reader.LoadObjectDefinitions("配置/普通/ springContext.xml&#34);

但是: 我想通过配置来实现。 我一直在玩(没有运气):

    <object type="Spring.Objects.Factory.Config.VariablePlaceholderConfigurer, Spring.Core">
      <property name="VariableSources">
        <list>
          <object type="Spring.Objects.Factory.Config.EnvironmentVariableSource, Spring.Core"/>
        </list>
      </property>
    </object>


   <object name="appConfigPropertyHolder"
            type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
       <property name="EnvironmentVariableMode" value="Override"/>
    </object>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,经过大量研究,它确实有效!

<object type="Spring.Objects.Factory.Config.VariablePlaceholderConfigurer, Spring.Core">
      <property name="VariableSources">
        <list>
          <object type="Spring.Objects.Factory.Config.EnvironmentVariableSource, Spring.Core"/>      
          <object type="Spring.Objects.Factory.Config.PropertyFileVariableSource, Spring.Core">
            <property name="Location" value="${root.config}/envars.properties" />
            <property name="IgnoreMissingResources" value="false"/>
          </object>
        </list>
      </property>
    </object>

属性文件的路径取决于环境变量。 变量将替换为从属性文件中获取的值。

我部署了一个包含4个环境属性文件的包+文件夹 我相应地设置了我的env var。 无需混淆app.config或多个Spring配置文件。