Профили 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.
Как вы думаете? пожалуйста, дайте несколько советов. спасибо.
Ответы
Ответ 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.