在我的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连接?我不确定...)
2条答案
按热度按时间nuypyhwy1#
你给的参数太多了,下面是我的应用程序yaml文件
基本上,我只是注解了schema,事情就开始工作了。我还添加了h2控制台,并开始检查mydb,这是它看起来如何
下面是h2控制台登录
here的参数,你可以找到完整的工作示例。
fsi0uk1n2#
在SQLite中,没有像其他一些数据库那样的模式分离。因此,在您的Flyway配置中,您不应该指定单独的模式。