我在SQLite数据库文件锁定问题上遇到的所有答案都涉及到同时读取和写入。但是,即使在单线程模式下运行,在我运行的集成测试中也会面临这个问题
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
更新:在甚至不知道为什么它应该有帮助的情况下,我在读写数据库的代码中添加了同步语句,之后错误就没有发生。
由于SpringBoot本身并不支持SQLite,所以我在
spring.jpa.database-platform=com.springboot.sqlite.SQLDialect
顺便说一句,我还有
spring.datasource.maxActive = 1
此外,我还设置了预写日志:
jdbcTemplate.execute("pragma journal_mode=WAL");
我的测试只按顺序运行几个读写操作,但它失败了
The database file is locked (database is locked); nested exception is org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1542)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:393)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:558)
任何帮助都是非常感激的。
2条答案
按热度按时间rpppsulh1#
尝试将以下配置添加到Applation.Properties
ojsjcaue2#
我在这里遇到了完全相同的问题,每次尝试从多个线程进行多个读/写操作时,SQLite DB都会锁定。
我所做的是将读/写存储库(SQLite DB)的命令放在@Service类中。然后用@async标志注解相应的函数,这样它就不会锁定主线程,并将对存储库的访问放在“同步(存储库)...”中。
示例: