Проблемы с настройкой Flyway - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать простую миграцию базы данных в Intellij с несколькими фиктивными таблицами, используя flyway.

Мои фиктивные таблицы помещаются в «resources / db /igration» и имеют формат «V1_0__initial_display.sql».".

Они могут содержать такие вещи:

 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');

My application.properties:

 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:

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.переменная с именем база данных:

jdbc:mysql://localhost/xy

Само приложение SpringBoot:

@SpringBootApplication

открытый класс XyApplication {

открытый статический void main (String [] args) {

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();   
 }  
}

Сообщение об ошибке:

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 из моей базы данных.Я думаю, что главная проблема с этим, и я пытаюсь инициализировать это.К сожалению, это не единственная проблема: моя реализация не сработала даже до того, как я удалил эту таблицу, поэтому могут возникнуть более концептуальные проблемы.

Не могли бы вы мне помочь?Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Ожидается, что Flyway будет первым, кто будет работать в схеме.Правильный способ справиться с этим - локально удалить все в схеме xy и собрать все, используя файлы миграции (.sql).Если у вас есть что-то в БД, которую вы не хотите удалять, вы можете использовать базовый флаг в вызове, чтобы указать, что вы знаете о данных в таблице.

Обычно, FlyWay и другие подобные инструменты миграциииспользуются для того, чтобы позволить разработчикам создавать одни и те же схемы в разных БД (таких как Dev и Production, или на разных машинах разработчиков).Если у вас уже есть таблица в xy, которая не пришла от FlyWay, вы можете использовать ее в своем коде, и она будет работать, но у производственных и других разработчиков эта таблица не будет.

0 голосов
/ 22 января 2019

Сообщение об ошибке содержит всю необходимую информацию о том, как это исправить.

Добавьте spring.flyway.baselineOnMigrate=true в ваше application.properties.

...