在Spring Boot 中使用带有SQLite数据库的Flyway

vs3odd8k  于 2023-10-23  发布在  SQLite
关注(0)|答案(2)|浏览(125)

在我的Sping Boot 项目中,我需要使用SQLite数据库。我已经成功地设置了SQLite数据库,如下所示:
依赖关系:

implementation("org.xerial:sqlite-jdbc:3.42.0.0")
implementation("org.hibernate.orm:hibernate-community-dialects")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")

application.yml

spring:
  datasource:
    url: jdbc:sqlite:file:myDb.db?cache=shared
    username: root
    password: root

正如你在上面看到的,我使用的是on diskSQLite数据库,数据库文件是myDb.db
我还创建了datasource bean:

@Bean
    public DataSource dataSource() {
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(props.getDriverClassName());
        dataSource.setUrl(props.getUrl());
        dataSource.setUsername(props.getUsername());
        dataSource.setPassword(props.getPassword());
        return dataSource;
    }

我验证了这个SQLite数据库设置是否有效,因为当我开始运行我的项目时,实体类的关联db表在数据库中成功创建。

接下来,我尝试设置Flyway如下:

我包括依赖:

implementation("org.flywaydb:flyway-core:8.5.11")

application.yml中,我添加了:

spring:
  ...
  flyway:
    baseline-on-migrate: true
    schemas: myDb
    enabled: true
    url: jdbc:sqlite:file:myDb.db?cache=shared
    user: root
    password: root
    validate-on-migrate: true
    locations: "classpath:db/migration"

我还在src/main/resources/下创建了目录/db/migration目录
但是当开始运行项目时,我最终得到错误:

Caused by: org.flywaydb.core.internal.exception.FlywaySqlException: Unable to check whether table "myDb"."flyway_schema_history" exists`

我知道在SQLite中没有“数据库模式”的概念,所以我也尝试手动创建表flyway_schema_history,然后开始运行项目,但我仍然得到相同的错误。
如何让Flyway + SQLite在Spring Boot 中工作?我错过了什么?
(我怀疑这是一个数据库连接问题,因为在我安装Flyway之前,项目可以成功地建立连接并创建基于JPA实体的表。或者,我可能错过了一些SQLite特定的Flyway配置,以建立Flyway的DB连接?我不确定...)

nuypyhwy

nuypyhwy1#

你给的参数太多了,下面是我的应用程序yaml文件

spring:
  jpa:
    hibernate.hbm2ddl.auto: create-drop
    hibernate.show_sql: true
  datasource:
    url: jdbc:sqlite:file:myDb.db?cache=shared
    username: root
    password: root
  h2:
    console.enabled: true
  flyway:
    baseline-on-migrate: true
#    schemas: myDb
    enabled: true
    url: jdbc:sqlite:file:myDb.db?cache=shared
    user: root
    password: root
    validate-on-migrate: true
    locations: "classpath:db/migration"

基本上,我只是注解了schema,事情就开始工作了。我还添加了h2控制台,并开始检查mydb,这是它看起来如何

下面是h2控制台登录

here的参数,你可以找到完整的工作示例。

fsi0uk1n

fsi0uk1n2#

在SQLite中,没有像其他一些数据库那样的模式分离。因此,在您的Flyway配置中,您不应该指定单独的模式。

spring:
  ...
  flyway:
    baseline-on-migrate: true
    enabled: true
    url: jdbc:sqlite:file:myDb.db?cache=shared
    user: root
    password: root
    validate-on-migrate: true
    locations: "classpath:db/migration"

相关问题