我在应用程序中使用spring,并且能够将类路径中某些文件的某些属性注入到我的应用程序中,并且一切正常。即
<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="searchContextAttributes" value="true" /> <property name="contextOverride" value="true" /> <property name="ignoreResourceNotFound" value="true" /> <property name="locations"> <list> <value>classpath:application.properties</value> </list> </property> </bean>
现在我可以${any.property.from.application.properties}在春季环境中使用。在我的主要班级中:
${any.property.from.application.properties}
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("appContext.xml");
它也可以正常工作,我的问题是,如何在春季环境属性中插入属性文件位置,而不是一开始就没有,我想使我的应用程序可配置。如果我从中执行我的应用程序,C:\dir或者/user/home/dir我假设在应用程序上下文中该值应为C:\application.properties或/user/home/dir/application.properties
C:\dir
/user/home/dir
C:\application.properties
/user/home/dir/application.properties
有时我也遇到类似的问题。我的要求是属性文件未捆绑在应用程序内部(因此不在类路径中)。该文件可以位于文件系统中的任何位置。这是我解决的方法,
我重用你的榜样
<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="searchContextAttributes" value="true" /> <property name="contextOverride" value="true" /> <property name="ignoreResourceNotFound" value="true" /> <property name="locations"> <list> <value>file://${APP_PROP_HOME}/application.properties</value> </list> </property> </bean>
Spring将$ {APP_PROP_HOME}解析为存储在相应env属性中的值,并且在运行时配置了您的应用程序。