2016-10-31 30 views
0

Я пытаюсь найти лучший способ настроить мое приложение Spring Boot Web для легкого переключения между следующими источниками данных для локального тестирования и развертывания.Как настроить различные источники данных для локального тестирования и развертывания в Spring Boot Application

  1. H2 in memory db. Только локальное тестирование.
  2. Dev oracle. Локальное тестирование и развертывание.
  3. Prod oracle. Только развертывание.

При локальном тестировании я хочу протестировать среду IDE (Eclipse). Базы данных Dev и prod oracle настроены на двух удаленных серверах.

После некоторых исследований существуют различные способы переключения с одного источника данных на другой.

  1. Использование весеннего профиля. Using H2 and Oracle with Spring Boot. Настройте следующие файлы в classpath, application.properties, application-h2. свойства и application-dev.properties. Хотя соединения для h2 и dev определены в соответствующих файлах свойств, spring.profiles.active устанавливается в application.properties. Мое понимание заключается в том, что это свойство можно переопределить во время процесса сборки, указав spring.profiles.active. Однако, похоже, это переменная JVM, как ее настроить на maven?
  2. Профиль Maven. Создайте несколько профилей в pom и фильтр, указывающий на файлы свойств приложений. Профиль, указанный параметром -P во время сборки maven, определит, какой файл свойств приложения посмотреть. Однако, согласно maven application with multi environment configuration can't deploy on tomcat, это создаст несколько войн для разного развертывания. Таким образом, метод 1 является предпочтительным. Кроме того, он не применяется для переключения источников данных при локальном тестировании.
  3. Единицы сохранения. Определите различные единицы сохранения для разных источников данных в файле persistence.xml. Используйте EntityManager, выбирая конкретный блок. Вариация этого метода включает в себя наличие переменной в именах элементов, которая определяется в application.properties.
  4. JNDI поиск. Настройте имя jndi в application.properties с помощью spring.datasource.jndi-name. Фактическая информация о базе данных, включая url и credentials, будет указана в файле context.xml в папке tomcat, где будет развернута война.

Мой разум настроен на локальную среду тестирования. Пойдем с методом 1. Переключение между H2 в памяти и оракуле настолько просто, просто изменив свойство в application.properties. Поскольку тестирование обычно выполняется в среде IDE, войны не нужно генерировать, хотя ответы приветствуются для запуска maven install с spring.profiles.active.

Что касается развертывания, то JNDI - это, безусловно, путь. Однако я обеспокоен тем, что два свойства в application.properties: spring.profiles.active и spring.datasource.jndi-name могут противоречить друг другу. Если у меня есть spring.profiles.active=h2, а затем попытался развернуть войну на prod-сервере, попытается ли она подключиться к h2 на основе профиля пружины или prod db на основе jdni-name? Какова наилучшая практика для размещения всех сценариев с достаточной гибкостью?

Также является явным классом конфигурации для требуемого источника данных, такого как Configure Mutiple DataSource in Spring Boot with JNDI? Мое понимание - application.properties и профиль весны должно быть достаточно, чтобы справиться с этим, не так ли?

ответ

1
  • Определенно использовать пружинные профили.
  • Вы не хотите использовать профили Maven, поскольку он создает различные артефакты. Спросите своих инженеров QA/Release о том, как они относятся к различным артефактам для разных сред :). Они не были бы счастливы.
  • H2 - это то, что вы хотите использовать в тестировании интеграции сервера CI. Такое интеграционное тестирование выполняется быстро и просто.
  • Вместо изменения профиля в application.properties, рассмотрите определение профиля через параметр командной строки. Так что изменения файла конфигурации не требуются для запуска вашего приложения в разных профилях.
+0

Можете ли вы обратиться к двум ключевым вопросам. Как определить профиль через командную строку при запуске mvn? 'spring.profiles.active', похоже, является параметром JVM, который можно запускать с помощью' java -Dspring.profiles.active'. Как передать его в maven? Что касается jndi, должен ли я создать другой профиль, называемый 'application-jndi.properties', который имеет указанное имя jndi? – ddd

+0

Как я уже говорил, сборка с различными профилями - плохая практика. Избегайте профилей Maven. Используйте Spring Profiles. И да, передайте его через командную строку. Забудьте о JNDI, если вам не нужно размещать ваше приложение в каком-то общем контейнере. – luboskrnac

+0

это не приложение для баннеров, это веб-приложение, развернутое как война в tomcat. как именно я должен передать профиль пружины через командную строку? – ddd

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

  • Нет связанных вопросов^_^