2013-09-16 2 views
1

У меня есть проект Spring MVC на основе инструмента построения maven. В моем приложении для некоторых данных я должен сделать вызовы веб-сервиса на внешний сервер. Я реализовал его, и все работает хорошо.Запуск в режиме разработки в веб-проекте

Но в режиме разработки я бы предпочел избежать их. Так в настоящее время у меня есть

public static boolean devel = false

Я использую выше булевы с if else заявления так, что если в режиме разработки, а затем предоставить статические данные. Если это не режим разработки, выполните вызовы веб-сервиса.

Но я нахожу эту булевую декларацию грязной. В том смысле, что мне вручную приходится исправлять логическое значение в моем коде каждый раз, когда я его развертываю в процессе производства. И однажды я забыл о том, что причинил хаос.

Есть ли приличный способ? Я бы не хотел, чтобы эта переменная была объявлена ​​в коде, но из некоторой константы, полученной во время процесса сборки или, возможно, с некоторым аргументом VM. Или они могут быть даже лучше. Если да, то как я включаю его в свой проект с весенним увлечением.

ответ

3

Что бы я сделал, так это иметь код по умолчанию для производственного поведения, так что, например, bool devel происходит из файла свойств. Значение по умолчанию в пути к классам = ложь и и для того, чтобы заменить его, я хотел бы использовать что-то вроде:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreResourceNotFound" value="true"/> 
    <property name="locations"> 
     <list> 
      <value>classpath:config.properties</value> 
      <value>${external-config}</value> 
     </list> 
    </property> 
</bean> 

на моем Dev машине я бегу мое приложение с

-Dexternal-config=file:/c:/debug.properties 

что свойства файл содержит некоторые заполнитель, который переопределяет значения, хранящиеся в config.properties, находящемся в контейнере/войне

1

Что я считаю «приличным способом» (как вы это называете) использовать зависимость впрыска; используя либо Spring, либо Java CDI. Это именно тот тип сценария, который полезен для инъекций зависимостей.

Затем вы объявляете интерфейс, который реализуется с помощью двух различных классов:

  1. реальный класс - который подключается к удаленному серверу и
  2. разработка/тест класс, который возвращает статические данные.

Ваша конфигурация запуска затем определит, какой из двух классов вводится в ваше приложение.

1

Spring (3.1+) предоставляет способ указания @Profile, который может использоваться в сочетании с аннотациями @Configuration. Посмотрите на http://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/

Используя эту methology, вы можете создавать свои собственные бобы конфигурации за окружающую среду (производство, разработка, постановка, и т.д.)

Смежные вопросы