我在控制台应用程序中使用 C# 和 Spring Net 1.3.2。
我得到:一个 app.cfg 一个 spring-context.xml 一个 environnement.xml 文件,其中包含根据应用程序运行的位置的特定变量值:一个用于生产的文件夹,一个用于 qa,一个用于测试。
我想要实现的目标:在我的 shell(windows)中,在使用 foo.bat 启动应用程序之前,我会:set environment="qa"
当 Spring 加载上下文时,它会选择环境变量(比如 qa)中包含的值,并加载正确的文件:从而替换:configuration/{environment}/vars.xml
通过配置/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("configuration/common/springContext.xml");
但是:我想通过配置来实现。我一直在玩(没有运气):
<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>
有任何想法吗 ?