我在属性文件中设置我的oracle环境变量属性,如下所示:
oracle.home=XXX
file.path=C:\workspace
我正在使用spring工厂bean注释,我在类中声明了oracle Home:
@Value("${oracle.home}") private String oracleHome; //becomes YYY
我的所有其他属性都被正确读入,但oracleHome
覆盖了我在我的环境中设置的内容(例如ORACLE_HOME),而没有从属性文件中读取..
为什么会发生这种情况,我该如何解决这个问题?
答案 0 :(得分:1)
OS环境变量的排列顺序高于.properties文件。 大多数操作系统都不允许使用句点分隔的键名,因此spring会自动将您的proprety名称从ORACLE_HOME映射到oracle.home。你可以在这里阅读更多内容:
答案 1 :(得分:1)
您可以控制属性占位符永远不会检查系统属性并使用属性文件中的键/值覆盖。
有3个可用值
<context:property-placeholder location="classpath:foo.properties">
<property name="systemPropertiesModeName">
<value>SYSTEM_PROPERTIES_MODE_NEVER</value>
</property>
</context>
或
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
p.setLocation("..")
p.setSystemPropertiesMode(SYSTEM_PROPERTIES_MODE_NEVER);
return p;
}