小编典典

如何从Main类将属性注入到Spring bean中

java

我在应用程序中使用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}在春季环境中使用。在我的主要班级中:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("appContext.xml");

它也可以正常工作,我的问题是,如何在春季环境属性中插入属性文件位置,而不是一开始就没有,我想使我的应用程序可配置。如果我从中执行我的应用程序,C:\dir或者/user/home/dir我假设在应用程序上下文中该值应为C:\application.properties/user/home/dir/application.properties


阅读 398

收藏
2020-11-26

共1个答案

小编典典

有时我也遇到类似的问题。我的要求是属性文件未捆绑在应用程序内部(因此不在类路径中)。该文件可以位于文件系统中的任何位置。这是我解决的方法,

  1. 定义一个环境变量,其值指向application.properties的位置。
  2. 假设我们有一个环境变量APP_PROP_HOME,其值为/ user / home / dir /
  3. 现在,在定义ServletContextPropertyPlaceholderConfigurer时,如下定义位置

我重用你的榜样

<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属性中的值,并且在运行时配置了您的应用程序。

2020-11-26