Spring Boot: переключение между встроенными и postgresql источниками данных путем изменения флага - PullRequest
1 голос
/ 22 октября 2019

Я создал приложение весенней загрузки и использую встроенную базу данных H2. Который работает нормально.

Однако я добавил файл application.properties и добавил зависимость к postgresql. Это также работает нормально, но когда мне нужно протестировать приложение, я хочу запустить его, используя встроенную БД. Я не вижу другого способа сделать это, кроме как удалить файл application.properties, который не очень аккуратный способ сделать это.

Я надеялся, что флаг spring.datasource.initialization-mode=embedded заставит его загрузить встроенную БД, но он полностью игнорирует ее.

Есть ли способ достичь этого, просто включив и выключив флаг?

Я использую gradle в качестве инструмента для сборки. Если это возможно сделать с помощью Gradle, это было бы неплохо.

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

В дополнение к тому, что сказал @Isank, это может быть полезно в тех случаях, когда вы хотите запустить приложение (не модульные / интеграционные тесты, а, возможно, вручную), используя базу данных в памяти или просто другую базу данных.

Вы можете определить профили, и для каждого профиля вы можете иметь различные свойства приложения. Используя соглашение об именах, скажем, у вас есть три среды (dev, prod, test), вы определяете три разных файла свойств:

application-dev.properties
application-prod.properties
application-test.properties

Вам нужно поместить все эти файлы в src/main/resources/, чтобы они получилипикет до автоматически. В качестве альтернативы, вы должны сообщить Spring-boot, где находятся файлы свойств, передав аргумент времени выполнения --spring.config.location.

Теперь, имея все эти файлы, как вы сообщите Spring-boot, какой из них использовать?

Если ваши файлы свойств названы в соответствии с соглашением application-{profile}.properties, то вы делаете это, передавая аргумент --spring.profiles.active={profile}.

  1. Запуск файла jar
java -jar spring-boo-app-name.jar --spring.profiles.active=prod 
//this will use the application-prod.properties file
Использование задачи bootRun gradle
bootRun {
    args '--spring.profiles.active=prod'
}

Когда вы запустите приложение весенней загрузки, вы увидите в консоли активный профиль.

enter image description here

1 голос
/ 22 октября 2019

В этом случае вам не нужны никакие флажки или переключатели. application.properties, находящийся внутри src/main/resources, влияет на приложение, а тот, который внутри src/test/resources, влияет на тесты этого приложения.

Теперь, как вы сказали, что вы хотите использовать встроенную БД для своих тестов, все, что вам нужно, это @DataJpaTest в вашем классе тестирования.

@DataJpaTest предоставляет некоторые стандартные настройки, необходимые длятестирование уровня персистентности:

  • настройка H2, базы данных в памяти
  • , настройка Hibernate, Spring Data и источника данных
  • , выполняющих @ EntityScan
  • включение ведения журнала SQL

И вот как будет выглядеть ваш тест репозитория

@RunWith(SpringRunner.class)
@DataJpaTest
public class SomeRepositoryIntegrationTest {}

    @Autowired
    private SomeRepository repository;

    // write test cases here
}

Подробное руководство по этой теме можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...