前言(可略过)
最近准备写一些小项目来验证一下脑袋中的项目
因为是“小项目”,所以对于数据持久化的实现,就不想用mysql等很重的db了
而且不用考虑安全性,故首先想到的就是使用 sqlite 本地数据库即可
然后因为是使用了 springboot 框架
所以也想使用一下 springboot-jpa 来整合,
但是在搭建过程中遇到了一些坑点,故作记录,以便回顾。
pom配置
首先是依赖的项目jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.github.gwenn</groupId>
<artifactId>sqlite-dialect</artifactId>
</dependency>
sqlite-jdbc和jpa自然不用多说,至于这个个人项目的jar:
引入他的原因是,jpa使用的 hibernate 目前是不再支持 sqlite 的
所以如果想要使用 sqlite 数据源,那么就要手写 hibernate 的方言(这也是很多文章中说的,在项目中手动建几个类的原因**(重点)**)
而洁癖的我,并不像在项目中引入无关的代码,所以找到了别人实现好的jar来使用
spring配置
application.yml的配置,网上一些配置方式是类似这样的:
eg1
eg2
spring:
jpa:
show-sql: true
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.SQLiteDialect
datasource:
driver-class-name: org.sqlite.JDBC
url: jdbc:sqlite::resource:db/dome.db
当然对于别的文章的博主按照他们当时的配置是没问题的
但是,这里有个问题 com.github.gwenn
后续是有更新的,其中 org.hibernate.dialect.SQLiteDialect
这个类变更了包名,所以会出现配置后启动失败的情况,如:
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.dialect.SQLiteDialect]
https://github.com/gwenn/sqlite-dialect/blob/master/src/main/java/org/sqlite/hibernate/dialect/SQLiteDialect.java
所以我们这里的方言配置项应该是:
database-platform: org.sqlite.hibernate.dialect.SQLiteDialect
此时重新启动即可
思考
我们这里配置的 database-platform
的作用是什么呢?
是为了指定一个 hibernate 能够识别得方言路径,而官方所支持的也是类似的类的路径
故我们这里想要支持 sqlite ,就要正确的指定jar中的这个类才可以
吐槽一下** csdn,居然连个上传图片的功能都炸了,(貌似是链接阿里的oss崩了)
而且,debug的日志居然也能带到生产环境,6
(这就把博客文章迁移的计划提上来)