首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flyway设置问题

Flyway设置问题
EN

Stack Overflow用户
提问于 2019-01-22 20:45:08
回答 2查看 1.4K关注 0票数 1

我正在尝试用Intellij创建一个简单的数据库迁移,其中包含一些使用flyway的虚拟表。

我的虚表放在“资源/db/迁移”中,格式为"V1___initial_display.sql“。

它们可能包含以下内容:

代码语言:javascript
复制
 CREATE TABLE Fake (
 ID int,
 name varchar(255)
 );

 CREATE TABLE Persons(
 ID int,
 name varchar (30)
 );

 INSERT INTO Persons(ID, name)
 VALUES(1,'AXC');

 INSERT INTO Persons(ID, name)
 VALUES(2,'BB');

我的application.properties:

代码语言:javascript
复制
 spring.jpa.hibernate.ddl-auto=validate
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
 spring.jpa.show-sql=true
 spring.logging.level.org.hibernate.SQL=debug
 spring.flyway.enabled=true
 spring.flyway.user=${db_username}
 spring.flyway.password=${db_password}
 spring.flyway.url=${database}
 spring.flyway.locations=classpath:/db/migration/V1_0__initial_display.sql

我的gradle.build的相关部分:

代码语言:javascript
复制
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.flywaydb:flyway-core'
runtimeOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly System.getenv("database")
runtimeOnly 'mysql:mysql-connector-java'
compileOnly 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compile "org.flywaydb:flyway-core:5.2.4" +
        ""
flywayMigration "com.xy.z"
}

flyway {
schemas = ['fake', 'persons']
placeholders = [
        'keyABC'          : 'valueXYZ',
        'otherplaceholder': 'value123'
]



url = (System.getenv("database"))
user = (System.getenv("db_username"))
password = (System.getenv("db_password"))
}

我的env的格式。名为database的变量:

代码语言:javascript
复制
jdbc:mysql://localhost/xy

SpringBoot应用程序本身:

代码语言:javascript
复制
@SpringBootApplication

公共类XyApplication {

公共静态空main(String[]参数){

代码语言:javascript
复制
SpringApplication.run(XyApplication.class, args);
System.out.println("Hello World!");
Flyway flyway = Flyway.configure().dataSource(System.getenv("database"), 
System.getenv("db_username"), System.getenv("db_password")).load();
flyway.clean();
flyway.baseline();
flyway.migrate();   
 }  
}

错误消息:

代码语言:javascript
复制
Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s) 
`xy` without schema history table! Use baseline() or set 
baselineOnMigrate to true to initialize the schema history table.

我最近从我的数据库中删除了flyway_schema_history。我认为主要的问题在于它,我正在尝试初始化它。不幸的是,这不是唯一的问题:我的实现甚至在我删除这个表之前就没有工作,所以可能会有更多的概念问题。

我可以请您帮个忙吗?我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-22 21:05:50

Flyway期望成为第一个在模式上运行的东西。处理此问题的正确方法是在本地删除xy模式中的所有内容,并使用迁移文件(.sql)构建所有内容。如果数据库中有不想删除的内容,可以在调用中使用基线标志来表明您知道表中的数据。

通常,FlyWay和其他类似的迁移工具用于允许开发人员在不同的DB(如开发和生产,或不同的开发人员机器)中创建相同的模式。如果您在xy中已经有一个不是来自FlyWay的表,那么您可以在您的代码中使用它,它可以工作,但是产品和其他开发人员将不会有这个表。

票数 1
EN

Stack Overflow用户

发布于 2019-01-22 20:53:42

错误消息包含有关如何修复此问题的所有必要信息。

spring.flyway.baselineOnMigrate=true添加到您的application.properties。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54308603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档