Spring Boot Test, по-видимому, создает базу данных H2 Test, отличную от той, которую я ожидал - PullRequest
2 голосов
/ 23 октября 2019

Итак, у меня есть Test, помеченный @DataJpaTest и @RunWith(SpringRunner.class), и application.yml в / src / test / resources с этим блоком (да, отступ должен быть в порядке):

spring:
  datasource:
    url: jdbc:h2:mem:foobar;MODE=Mysql;MVCC=FALSE;
    username: sa
    password:
    driver-class-name: org.h2.Driver

Когда я запускаю тест, я неожиданно получаю следующие строки в журнале:

2019-10-23 17:11:08.311  INFO 13468 --- [           main] beddedDataSourceBeanFactoryPostProcessor : Replacing 'dataSource' DataSource bean with embedded version
2019-10-23 17:11:08.801  INFO 13468 --- [           main] o.s.j.d.e.EmbeddedDatabaseFactory        : Starting embedded database: url='jdbc:h2:mem:7855270f-61b7-4f37-8796-cbfeb8ad42ea;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

В частности это: Starting embedded database: url='jdbc:h2:mem:7855270f-61b7-4f37-8796-cbfeb8ad42ea;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false

Почему Spring boot запускает БД с UUID-Создана БД и не принимает настройки из spring.datasource.url?

«Производительное» приложение без проблем берет параметры источника данных из файла в / src / main / resources с тем же синтаксисом ...

1 Ответ

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

Из документации @ DataJpaTest вы можете видеть, что:

@ DataJpaTest использует встроенную базу данных в памяти (заменяя любой явный или обычно автоматически настраиваемый источник данных). Аннотацию @AutoConfigureTestDatabase можно использовать для переопределения этих настроек.

Так что @DataJpaTest помечается @AutoConfigureTestDatabase, что заставляет TestDatabaseAutoConfiguration создавать встроенный источник данных с жестко заданным generateUniqueName(true):

TestDatabaseAutoConfiguration.java :

EmbeddedDatabase getEmbeddedDatabase() {
    ...
    return new EmbeddedDatabaseBuilder()
        .generateUniqueName(true)
        .setType(connection.getType())
        .build();
}

Я думаю, что они делают это для предотвращения конфликтов имен БД и смешивания состояний между запусками теста.

...