[笔记] - springboot-jpa 使用sqlite 踩坑

前言(可略过)

最近准备写一些小项目来验证一下脑袋中的项目
因为是“小项目”,所以对于数据持久化的实现,就不想用mysql等很重的db了
而且不用考虑安全性,故首先想到的就是使用 sqlite 本地数据库即可

然后因为是使用了 springboot 框架
所以也想使用一下 springboot-jpa 来整合,
但是在搭建过程中遇到了一些坑点,故作记录,以便回顾。

pom配置

首先是依赖的项目jar包:

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-jpaartifactId>
        dependency>
		<dependency>
            <groupId>org.xerialgroupId>
            <artifactId>sqlite-jdbcartifactId>
        dependency>
        <dependency>
            <groupId>com.github.gwenngroupId>
            <artifactId>sqlite-dialectartifactId>
        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]

[笔记] - springboot-jpa 使用sqlite 踩坑_第1张图片

https://github.com/gwenn/sqlite-dialect/blob/master/src/main/java/org/sqlite/hibernate/dialect/SQLiteDialect.java

[笔记] - springboot-jpa 使用sqlite 踩坑_第2张图片

所以我们这里的方言配置项应该是:

database-platform: org.sqlite.hibernate.dialect.SQLiteDialect

此时重新启动即可

思考

我们这里配置的 database-platform 的作用是什么呢?

是为了指定一个 hibernate 能够识别得方言路径,而官方所支持的也是类似的类的路径
故我们这里想要支持 sqlite ,就要正确的指定jar中的这个类才可以

吐槽一下** csdn,居然连个上传图片的功能都炸了,(貌似是链接阿里的oss崩了)
而且,debug的日志居然也能带到生产环境,6

(这就把博客文章迁移的计划提上来)

[笔记] - springboot-jpa 使用sqlite 踩坑_第3张图片

你可能感兴趣的:(笔记,Java,工具,sqlite,spring,boot,数据库)