Я пытаюсь найти лучший способ настроить мое приложение Spring Boot Web для легкого переключения между следующими источниками данных для локального тестирования и развертывания.Как настроить различные источники данных для локального тестирования и развертывания в Spring Boot Application
- H2 in memory db. Только локальное тестирование.
- Dev oracle. Локальное тестирование и развертывание.
- Prod oracle. Только развертывание.
При локальном тестировании я хочу протестировать среду IDE (Eclipse). Базы данных Dev и prod oracle настроены на двух удаленных серверах.
После некоторых исследований существуют различные способы переключения с одного источника данных на другой.
- Использование весеннего профиля. 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
? - Профиль Maven. Создайте несколько профилей в pom и фильтр, указывающий на файлы свойств приложений. Профиль, указанный параметром
-P
во время сборки maven, определит, какой файл свойств приложения посмотреть. Однако, согласно maven application with multi environment configuration can't deploy on tomcat, это создаст несколько войн для разного развертывания. Таким образом, метод 1 является предпочтительным. Кроме того, он не применяется для переключения источников данных при локальном тестировании. - Единицы сохранения. Определите различные единицы сохранения для разных источников данных в файле persistence.xml. Используйте EntityManager, выбирая конкретный блок. Вариация этого метода включает в себя наличие переменной в именах элементов, которая определяется в application.properties.
- 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 и профиль весны должно быть достаточно, чтобы справиться с этим, не так ли?
Можете ли вы обратиться к двум ключевым вопросам. Как определить профиль через командную строку при запуске mvn? 'spring.profiles.active', похоже, является параметром JVM, который можно запускать с помощью' java -Dspring.profiles.active'. Как передать его в maven? Что касается jndi, должен ли я создать другой профиль, называемый 'application-jndi.properties', который имеет указанное имя jndi? – ddd
Как я уже говорил, сборка с различными профилями - плохая практика. Избегайте профилей Maven. Используйте Spring Profiles. И да, передайте его через командную строку. Забудьте о JNDI, если вам не нужно размещать ваше приложение в каком-то общем контейнере. – luboskrnac
это не приложение для баннеров, это веб-приложение, развернутое как война в tomcat. как именно я должен передать профиль пружины через командную строку? – ddd