Как добавить свойства в боб из пружинного класса - PullRequest
1 голос
/ 25 июля 2011

Я использую 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

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Когда-то назад у меня была похожая проблема. Мое требование заключалось в том, что файлы свойств не связаны внутри приложения (и, следовательно, не в пути к классам). Файл может находиться в любом месте файловой системы. Вот как я это решил,

  1. Определить переменную среды, значение которой указывает на местоположение application.properties.
  2. Допустим, у нас есть переменная env 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, и ваше приложение настраивается во время выполнения.

0 голосов
/ 26 июля 2011

Вы можете использовать @Value для ввода значений из env.Пример:

private someFoo;

@Value("${systemProperties.someFoo}")
public void setSomeParam(String someParam) {
   this.someFoo = someParam;
}
0 голосов
/ 25 июля 2011

Если я правильно читаю ваш вопрос, вы хотите использовать внешний файл свойств (т.е. файл не находится в пути к классу среды выполнения приложения). Если это так, вам нужно использовать тег файла

 <value>file:///c:\application.properties</value>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...