SqlLite是一个嵌入式轻量级文件数据库
- 侵入式 。 方便,不需要安装数据库,仅需要一个目录
- 轻量级。支持的数据量不大。
- 单文件。有文件锁。标题出现的问题就是触发了锁。
所以,sqlLite的锁是库锁,因为sqlLite的数据库就是一个后缀为 .db
的文件,文件是有写锁的
因此给sqlLite分配太多链接没有意义。
这个问题就是因为并发触发了sqlLite的锁机制,解决方案就是变成顺序读和写,维护一个链接就可以了.
Hikari 配置示例如下 :
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setAutoCommit(true);
hikariDataSource.setJdbcUrl("jdbc:sqlite:D:/home/sqllite/database-visual/database.db");
// 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
hikariDataSource.setConnectionTimeout(10 * 60 * 1000);
// 一个连接空闲状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
hikariDataSource.setIdleTimeout(10 * 60 * 1000);
// 这里是SQLLite数据库,维护一条链接即刻,并非时排队
hikariDataSource.setMinimumIdle(1);
hikariDataSource.setMaximumPoolSize(1);