微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在运行Micronaut功能测试时备份和恢复sqlite db

如何解决如何在运行Micronaut功能测试时备份和恢复sqlite db

我是我的应用程序,我正在使用名为“message”的 sqlite 数据库。为了测试功能,我编写了一个功能测试。测试调用执行以下操作的控制器:

  1. 删除所有现有记录(测试 BeforeEach 方法
  2. 加载 csv 文件(控制器调用的实际功能以提供服务)
  3. 删除所有记录(测试 AfterEach 方法

由于它是 prod db,我想在测试运行之前保留实际数据,所以我使用以下代码

SELECT a.OP,a.ID,COALESCE(a.'First name',b.'First name'),COALESCE(a.'Last name',b.'Last name'),'Phone number'
FROM table a
LEFT JOIN (SELECT * FROM table WHERE OP = 'I' AND and 'First name' IS NOT NULL AND 'Last name' IS NOT NULL LIMIT 1) b ON b.ID = a.ID;

我的 DAO 文件如下所示:

    @BeforeAll
    @SneakyThrows
    static void backupExistingData(){
        Thread.sleep(1000);
        Path sourceFile = Path.of("messages_lookup_db/messages.db");
        Path targetFile = Path.of("messages_lookup_db/messages_backup.db");
        Path target =  Files.copy(sourceFile,targetFile,StandardcopyOption.REPLACE_EXISTING);
        System.out.println(target.getFileName());
        Thread.sleep(1000);
    }

    @BeforeEach
    void setup() {
        dao.deleteall();
    }

    @AfterEach
    void cleanUpDatabase() {
        dao.deleteall();
    }

    @Afterall
    @SneakyThrows
    static void restoreExistingData(){
        Thread.sleep(1000);
        Path sourceFile = Path.of("messages_lookup_db/messages_backup.db");
        Path targetFile = Path.of("messages_lookup_db/messages.db");
        Files.move(sourceFile,StandardcopyOption.REPLACE_EXISTING);
    }

这里的 message.db 是 prod 数据,所以我试图在测试开始之前对其进行备份,并且在所有测试完成后我将其移动到原始数据库名称

但是当我尝试这样做时,我收到以下错误

messages_lookup_db\messages.db:进程无法访问该文件,因为它正被另一个进程使用。

@Repository(value = "messagesdb")
@JdbcRepository(dialect = Dialect.ANSI)
public interface MessageDao extends CrudRepository<MessageEntity,String> {
    @Executable
    @Retryable
    Optional<String> findMessageCodesByCountry(String country);
}

我什至使用过 java.nio.file.filesystemexception: messages_lookup_db\messages.db: The process cannot access the file because it is being used by another process. at java.base/sun.nio.fs.WindowsException.translatetoIOException(WindowsException.java:92) at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108) at java.base/sun.nio.fs.WindowsFilecopy.move(WindowsFilecopy.java:384) at java.base/sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:292) at java.base/java.nio.file.Files.move(Files.java:1422) at com.tesco.MessageFunctionTest.restoreExistingData(MessageFunctionTest.java:58) ,但该问题仍然存在。

在这里做错了什么吗?

问候

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。