Я работаю над новым приложением Spring Batch (3.0.3.RELEASE), в котором во время заданий будет осуществляться доступ к нескольким базам данных. Для тестирования мы используем HSQLDB (2.3.2) в качестве встроенной базы данных.
В моем контексте приложения у меня есть следующее.
<jdbc:embedded-database id="dataSource">
</jdbc:embedded-database>
<jdbc:embedded-database id="proDataSource">
<jdbc:script location="classpath:script-tables.sql" />
<jdbc:script location="classpath:script-constraints.sql" />
</jdbc:embedded-database>
<jdbc:embedded-database id="altDataSource">
<jdbc:script location="classpath:script-alt-tables.sql" />
</jdbc:embedded-database>
Когда я запускаю один тест в Eclipse, все в порядке. Когда я собираю из командной строки, после первого теста я получаю ошибки
Failed to execute SQL script statement at line 3 of resource class path resource [script-promrkt-promo.sql]
object name already exists: PROMRKT
Мне кажется, что процесс заполнения в EmbeddedDatabaseFactory получает уже заполненную базу данных. Из того, что я могу сказать, так это то, что после каждого теста не выполняется SHUTDOWN, и HSQLDB оставляет уже заполненную базу данных в памяти.
Я повторно просмотрел документацию и в Spring Doc показывает явную команду выключения. Но если Spring запускает встроенную базу данных при запуске моего теста, почему он не закрывает ее после завершения теста?
- Ожидается ли, что встроенные базы данных останутся после каждого модульного теста для одного и того же контекста приложения?
- В каком порядке Spring запускает встроенную базу данных и когда инициализируется транзакционный контекст?
- Мне нужно использовать очиститель базы данных?
- Можно ли обновить заполнение так, чтобы оно заполнялось только при первом запуске базы данных, и откат к исходной конфигурации скрипта, когда мой тест будет завершен (вроде того, как работали AbstractTransactionalSpringContextTests)
- Нужны ли мне маркеры транзакций? JobRepo Spring Batch правильно заполняется и уничтожается между каждым тестом. Почему нет моих пользовательских источников данных?