springboot环境下配置使用sqlite数据库方式
作者:一路1向北
springboot环境配置使用sqlite数据库
在springboot环境下,使用mybatis配置sqlite数据库。
pom文件导入mybatis和sqlite依赖
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.21.0.1</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>
application.properties配置
spring.datasource.driver-class-name=org.sqlite.JDBC spring.datasource.url=jdbc:sqlite::resource:static/sqllite/web_manage.db spring.datasource.username= spring.datasource.password= mybatis.mapper-locations=classpath:static/mapper/*.xml
具体的url等路径根据实际情况填写,若是引用项目内的db文件,必须以jdbc:sqlite::resource: 开头,后面填写存放路径,一般放在static下的文件内。
使用
接下来就像mybatis配置mysql数据库完成后一样,进行数据的操作即可,sql语句大同小异。
Springboot集成sqlite3遇到的问题
使用背景
需要做C/S系统,数据库选择文档型的sqlite3
在使用过程中遇到了一些问题
1.sqlite3仅支持数据库单连接
在最开始的时候由于直接粘贴复制,导致在每次停止服务后数据库都会被锁,报“[SQLITE_BUSY] The database file is locked (database is locked)”异常,后经排查,是配置了两个数据源,导致sqlite3数据库死锁。
sqlite3其本质是文档型数据库,在启动项目之后,无法再用数据库连接工具连接到数据库。
在对数据库操作时亦如此,它不支持并行操作,所以在使用多线程操作时可能会报“[SQLITE_BUSY] The database file is locked (database is locked)”异常。
2.在删除库中的数据之后,数据库占用空间未减小
由于我是将数据库嵌入C/S系统,同时需要对库的数据进行清理,所以需要在删除之后清除所占内存
原因:从Sqlite删除数据后,未使用的磁盘空间会被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。
解决方案:
方案1.删除后手动执行VACUUM命令
由于我是通过springboot集成的,所以在清空数据库之后,新加一条清空数据库的指令
<update id="vacuum"> VACUUM </update>
方案2.在数据库文件建成中,将auto_vacuum设置成“1”。
注意:只有在数据库中未建任何表时才能改变auto-vacuum标记。试图在已有表的情况下修改不会导致报错。
当开启auto-vacuum,当提交一个从数据库中删除除数据的事物时,数据库文件自动收缩。
数据库会在内部存储一些信息以便支持这一功能,这使得数据库文件比不开启该选项时稍微大一些。
推荐使用方案1
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。