Spring: добавление разных файлов свойств в соответствии с профилем - PullRequest
14 голосов
/ 24 февраля 2012

Во-первых, некоторый контекст:

В настоящее время я работаю над проектом, в котором я использую среду Spring в Google AppEngine (GAE) для получения некоторых данных из одного из сервисов Google. Для этого я использую возможности Google OAuth. Для этого мне нужно использовать clientSecret и clientId, характерные для моего приложения. Поскольку это статические значения конфигурации, я использую функциональность Spring * <util:properties> ( ссылка на документацию ), чтобы вставить эти значения в соответствующие классы.

XML config:

<util:properties id="googleProperties" location="WEB-INF/google.properties" />

Использование класса:

@Value("#{googleProperties['google.data.api.client.id']}")
private String clientId;

Мой вопрос:

Как оказалось, значения clientId и clientSecret должны быть разными для производства (при развертывании в App Engine) и для разработки (на моем локальном компьютере). Чтобы решить эту проблему без необходимости постоянно менять значения в файле свойств при развертывании, я изучил конфигурацию Spring profiles, которая позволила бы мне указать различные файлы свойств для производства и разработки. Хотя у меня есть представление о том, как работают профили Spring на основе на основе документации , я совершенно не уверен, каким будет подходящее решение в данной конкретной ситуации.

Другими словами, как я могу внедрить различные файлы свойств в зависимости от того, развернуто ли мое приложение локально или в GAE?

Ответы [ 2 ]

13 голосов
/ 25 февраля 2012

Пара вариантов:


Системные переменные

Вы можете использовать префикс для управления специфическими для среды свойствами, это можно сделать с помощью системных переменных:

 <util:properties id="googleProperties" 
                  location="WEB-INF/${ENV_SYSTEM:dev}/google.properties" />

В этом случае он всегда будет выглядеть под:

 <util:properties id="googleProperties" 
                  location="WEB-INF/dev/google.properties" />

по умолчанию , если не установлена ​​системная переменная ENV_SYSTEM. Например, если он установлен на qa, он автоматически будет выглядеть под:

 <util:properties id="googleProperties" 
                  location="WEB-INF/qa/google.properties" />

пружинные профили

Другой подход - сделать профиль бобов специфичным. Например:

<beans profile="dev">
    <util:properties id="googleProperties" 
                     location="WEB-INF/google-dev.properties" />
</beans>

<beans profile="qa">
    <util:properties id="googleProperties" 
                     location="WEB-INF/google-qa.properties" />
</beans>

Соответствующий googleProperties будет загружен в зависимости от набора профилей. Например, это загрузит WEB-INF/google-dev.properties:

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.getEnvironment().setActiveProfiles( "dev" );
ctx.load( "classpath:/org/boom/bang/config/xml/*-config.xml" );
ctx.refresh();
0 голосов
/ 24 февраля 2012

Вы на правильном пути, в нашем приложении у нас тот же сценарий, и мы используем «профили» для управления свойствами.Мы используем два файла конфигурации, один для производства, а другой для тестирования с соответствующими профилями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...