我想从正在运行的Sping Boot 中删除H2数据库。
我们找到了h2提供的库,而不是简单地删除作为File类的 *.mv.db文件。但是,我删除了文件,但数据库中的数据仍然是一样的。它甚至可以插入,我可以继续使用它,就好像我有一个文件。
我使用的代码如下。
String datasource_nm = "test";
String path = "/home/java/";
DeleteDbFiles.execute(path, datasource_nm, true);
字符串
这段代码允许我删除h2数据库中的 *.mv.db文件。但是,我认为这段代码本身会删除文件,但不会完全删除它。
如果删除了正在运行的数据库,您仍然可以执行Select、Insert、Update和Delete语句。
由于所有现有的数据库数据只有在重新启动后才会消失,因此即使没有文件,它们也似乎在内存中使用它。
是否有一种方法可以完全删除文件以及文件,即使我在运行时删除它?
1条答案
按热度按时间9o685dep1#
如果你使用JPA(你没有在文本中提到它,但添加了一个标签[jpa]),你必须看到数据库被透明缓存访问。在这种情况下,您不得篡改底层数据库文件。
为了避免这个问题,您必须在JPA访问上创建自己的管理层,在那里您可以“关闭它”--这意味着您必须确保每个
EntityManager
都停止工作,等等。然后,您可以“停止”数据库并删除文件。但是你不能使用Sping Boot 的内置工具来访问数据库。