Sqlite держать в памяти базы данных открытой до выхода из JVM - PullRequest
0 голосов
/ 29 мая 2019

Я бы хотел сохранить базу данных sqlite в памяти, но без подключенных соединений.

Я занимаюсь модульным тестированием веб-приложения, поэтому в методе @BeforeAll я выполняю некоторую инициализацию, а затем вразличные методы тестирования, некоторые манипуляции с DDL.

Конечно, когда закрыто последнее открытое соединение, sqlite в памяти db отключается, что нарушает мои тесты.

Я достиг, чтобы сохранить H2в базе данных памяти, открытой до тех пор, пока JVM не живет, делая это

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

Но я не могу найти альтернативу для sqlite.Я пытался с

jdbc:sqlite::memory:&cache=shared

Но, похоже, не работает.

Возможно ли это?

1 Ответ

0 голосов
/ 29 мая 2019

Поскольку предполагается, что юнит-тесты независимы друг от друга, я бы не советовал действовать таким образом.В зависимости от используемой вами базовой структуры, вы можете захотеть использовать аннотации для управления выполнением инициализации и демонтажа SQL.Например, для Spring вы можете использовать следующее:

https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-testing-annotation-sql

Если вы не можете использовать аннотации или действительно намерены идти по этому пути (контекст - это все: вы можетеесть веские причины) одной из возможностей было бы открыть дополнительное соединение в вашем методе @BeforeAll, который вы затем вручную закрыли бы в методе @AfterAll.Поскольку это будет дополнительное соединение, управляемое отдельно вашим кодом, sqlite будет обманутым НЕ выполнять его очистку до тех пор, пока не будет выполнен метод @AfterAll.

Если вы хотите, чтобы это было на уровне JVM, вы можете использоватьстатический инициализатор класса ...

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