Spring MVC с несколькими конфигурациями - PullRequest
1 голос
/ 16 января 2011

для моего приложения spring-mvc я создал несколько типов конфигурации (unittest, интеграция, qa, производство).Все конфиги находятся в одном war-файле, поэтому я создаю только один тип приложения.Какую конфигурацию выбрать, должен решить сервер, на котором запущено приложение.

Чтобы решить, какую конфигурацию следует использовать, мне нужно посмотреть в файл.После этого я могу решить, какую конфигурацию должен использовать spring mvc.

На данный момент по соглашению всегда используется -servlet.xml.Есть ли способ, как динамически решить, какую конфигурацию взять?

С уважением, Майкл

Ответы [ 3 ]

4 голосов
/ 16 января 2011

Вот решение, которое я использую. Работает очень хорошо:

  • Поместите различия конфигурации в файлы свойств.
  • Храните один Spring xml с заполнителями.
  • Используйте PropertyPlaceholderConfigurer для установки свойств.
  • PropertyPlaceholderConfigurer может использовать системные свойства для разрешения имени файла свойств для загрузки.
  • Установите системное свойство с именем вашей среды перед инициализацией PropertyPlaceholderConfigurer (вы можете сделать это в bean-компоненте, который читает значение из вашего файла).

И вот, пожалуйста! Окружение будет точно определено, и соответствующие свойства будут загружены!

Не нужно ждать Spring 3.1, вы можете использовать это решение сегодня с 3.0.

0 голосов
/ 16 января 2011

В конце концов я использую PropertyPlaceholderConfigurer, но немного отличается от упомянутого Акселя: я загружаю только одно свойство из своей конфигурации и использую его, чтобы определить, какой импорт использовать. Из-за https://jira.springframework.org/browse/SPR-1332 я не могу использовать файл для хранения типа экземпляра, но должен использовать переменные окружения.

<bean id="propertyConfigurerOne" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
<import resource="classpath:/web${vabse.Environment}.xml"/>
0 голосов
/ 16 января 2011

У меня такая же настройка, но я использую maven для создания WAR-ов по-разному. Я использую PropertyPlaceholderConfigurer в контексте:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

   <context:property-placeholder location="classpath:datasource.properties" ignore-unresolvable="true" />

   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driver}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}" />

   <!--other beans-->
</beans>

тогда я устанавливаю папку окружений:

src
--main
----environments
------dev
--------datasource.properties
------cert
--------datasource.properties
------prod
--------datasource.properties

Затем в моем Maven pom я использую профиль сборки, чтобы скопировать что-либо в папку среды на основе флага параметра в команде maven:

<profiles>
        <profile>
            <id>environment</id>
            <activation>
                <property>
                    <name>environment</name>
                </property>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>
                            src/main/environments/${environment}
                        </directory>
                    </resource>
                </resources>
                <!-- other build config and plugins -->

поэтому следующая команда:

mvn clean -Denvironment=dev install

скопирует dev datasource.properties на войну

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