2014-10-29 4 views
0

я следующие:Spring Лучший подход для нескольких сред

  • Система А - Авторизация (REST API)
  • System B - Необходимо проверить AUTH
  • System C - Необходимо проверить AUTH
  • система D - Необходимо проверить AUTH

И у меня есть много среды:

  • Разработка
  • гомолог
  • Производство

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

Итак, идея состоит в том, чтобы создать Integration System, который будет JAR с фильтрами Jerseys и использует конфигурацию родителей (активный профиль из Spring), чтобы получить правильный URL. Я мог бы даже использовать этот JAR, чтобы сделать Система B общается с Система D также, если я могу сделать эту работу.

Трюк заключается в том, что этот JAR получает правильный файл .properties на основе Enviroment (устанавливается в родительском проекте). Честно говоря, я не знаю, с чего начать.

Чтение Документов для Spring среды я нашел:

Не использовать профили, если более простой подход может получить работу. Если единственное, что меняется между профилями, это значение свойств, существующее SpringSlaceholderConfigurer/может быть всем необходимым.

Я мог бы иметь 3 различные свойства файлов (разработка, гомолог или производство), или я мог бы один файл свойств с различными ключами:

system.a.url.develpment=http://localhost:8080/systemA/authorize 
system.a.url.homolog=http://localhost:8081/systemA/authorize 
system.a.url.production=http://api.systemA.com/authorize 

Каков наилучший подход? Что бы вы сделали?

ответ

0

В таком «простом» случае я бы использовал только файл свойств для настройки URL-адресов и имел разные конфигурационные файлы для разных сред (dev, prod, ..) с одним (таким же именованным свойством), например.

system.a.url=http://localhost:8081/systemA/authorize 

Вы можете управлять своими файлами свойств вручную (например, за пределами фляги/войны), или вы можете использовать maven profiles сделать банку/войны файл специфичен для вашей среды. Но я не вижу необходимости в весенних профилях.

EDIT: В качестве альтернативы вы можете использовать переменные среды для настройки параметров, специфичных для среды (какое совпадение имен:). Обратите внимание, что вы можете иметь разные среды внутри одной машины. Для более подробной информации проверьте, например. this.

export AUTH_URL="http://localhost:8081/systemA/authorize" 
+2

Последний, используя профили maven для создания различных артефактов, является не go imho. Вам нужен один проверенный артефакт, который вы переходите в разные среды, так как это то, что вы тестируете, нет гарантии, что все артефакты будут точно такими же. Единственное жизнеспособное решение - использовать файл внешних свойств и иметь его в хорошо известном месте. –

+0

Для этого мне нужен только ОДИН JAR. Потому что JAR будет зависеть от всех систем. Этот JAR должен знать, в какой среде работает родительский проект, поэтому я могу получить правильный URL. –

+0

Если вы хотите только одну банку, то вы можете зависеть от внешней конфигурации. Или, альтернативно, вам нужно использовать любой вход извне (переменные системы или переменные -Dparams), чтобы определить вашу среду или непосредственно необходимый URL (в зависимости от того, у вас больше конфигурации, связанной с одной средой) – sodik