Подтвердить что ты не робот

Профили maven или профили spring?

много java-приложений строятся с помощью maven. maven имеет концепцию Profiles, очень удобно создавать пакет релизов для разных сред. например dev/test/prod используя разные path / jndiname / security rule / properties files... Я думаю, мне не нужно перечислять коды здесь, чтобы объяснить это.

Spring - очень хорошая и популярная структура для разработки java, так как Spring3 также поддерживает концепцию профилей.

Теперь возникает вопрос: для освобождения от разных целей ENV, какой из них лучше? сейчас я предпочитаю профиль maven. поскольку spring должен копировать каждое определение bean в каждом профиле. и ему требуется инициализатор/свойство, чтобы spring знал, какой профиль должен быть активирован.

но я чувствую, что spring профиль более гибкий, чем профиль maven.

Как вы думаете? пожалуйста, дайте несколько советов. спасибо.

4b9b3361

Ответ 1

Профили Maven предоставили бы решение для построения времени, в то время как профили SpringFramework предоставили бы альтернативу времени выполнения. Я думаю, что это первый вопрос, который можно задать самому себе: если он хочет иметь один пакет, который может быть развернут в разных средах, или если он хочет, чтобы инструмент сборки предоставлял разные пакеты в соответствии с целевой средой.

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

Ответ 2

Как уже упоминалось в других ответах: все зависит от того, как вы работаете:)

В последние годы мы использовали maven и теперь профили spring 3.1:

  • мы используем плагин maven-release для вырезания релизов. это вызывает проблемы с средами, если мы будем использовать профили maven, так как нам нужно будет перестроить выпуск или, по крайней мере, тег с каждым профилем maven
  • поэтому мы создаем файл .war для всех сред и используем spring PropertyPlaceholderConfigurer для настройки приложения (или некоторого ресурса JNDI в зависимости от клиента). Это позволяет иметь только один выпуск релиза maven.
  • Проводятся профили spring, когда среда также отличается. например, службы проверки подлинности, которая недоступна для всех сред. Здесь мы закрываем эту службу и помещаем ее в профиль spring. Мы активируем профили spring в свойствах, которые читаются PropertyPlaceholderConfigurer, которые мы используем в любом случае.

Есть несколько полезных советов о том, как это сделать:

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

Конечно, есть и другие способы. Я не думаю, что это конец истории:)

Но это может помочь.

Ответ 3

Если вам нужны разные артефакты, переходите к maven. Если это просто реальная конфигурация, которая может быть настроена ПОСЛЕ создания артефакта, то пользовательские профили Spring.

Ответ 4

Мне пришлось использовать свойства-maven-plugin для установки системного свойства в зависимости от того, какой профиль maven был активирован. Затем в Spring я программным образом активировал профили (ы), которые я хотел, в зависимости от этого системного свойства:

Строка activeProfile = System.getProperty( "myapp.profile" );

appContext.getEnvironment(). SetActiveProfiles (....)

Кроме того, когда я хотел напрямую связать два вида профиля (maven/ spring), я устанавливал свойство spring.profiles.active через плагин maven.

В дизайне, возможно, неправильные методы, но они решили мои проблемы.

Ответ 5

Я думаю, это зависит от ваших требований. Если у вас разные зависимости на основе среды (например, драйверы jdbc и т.д.), Вы захотите использовать maven для сортировки.

Если вам просто нужно настроить развертывание, вам, вероятно, лучше использовать spring.