Я провожу интеграционный тест для процесса пружинной интеграции, состоящего из 2 потоков интеграции.
1-й поток получает сообщение от пользователя / теста и помещает его в очередь сообщений jdb c (H2DB).
2-й поток управляется транзакционным опросчиком, который извлекает сообщение из очереди из той же очереди и записывает его в папку.
Тест периодически проверяет содержимое папки и завершается успешно, если ему удается найти файл в папке до заданного времени ожидания.
Иногда тест находит файл и начинает закрывать контекст Spring до того, как транзакция опроса успевает зафиксировать, и в этом случае мой тест умирает ужасной смертью и проклинает меня окончательным «не может зафиксировать» JDB C транзакция, база данных больше не доступна "исключение.
1) как я могу избежать того, чтобы мой тест завершился до того, как транзакция опроса будет зафиксирована?
Примечание: так как транзакция опроса не находится внутри тестового потока, я могу (вероятно) не использовать обычные возможности, предоставленные Spring для транзакционного тестирования.
Моя текущая идея состоит в том, чтобы проверять не только наличие файла, но и утверждать, что очередь сообщений пуста. Я считаю, что транзакция опроса не должна допускать, чтобы тестовый поток видел пустую очередь до тех пор, пока транзакция не будет зафиксирована (без «грязного чтения»).
2) уровень изоляции транзакций Spring (интеграция) по умолчанию с H2 гарантирует мне избегать грязных чтений?