목차

Flyway Java Database Migration

Flyway Gradle Plugin

config 파일 이용

gradle 에 직접 설정

Task 직접 생성

ext.flyway = null // custom 사용시 flyway extionsion null로 처리.
 
tasks.create(name: 'myFlywayMigrate', type: org.flywaydb.gradle.task.FlywayMigrateTask) {
    extension = new org.flywaydb.gradle.FlywayExtension()
    // extension configurations...
}
 
// FlywayBaselineTask, FlywayCleanTask, FlywayInfoTask, FlywayInitTask(@deprecated)
// FlywayMigrateTask, FlywayRepairTask, FlywayValidateTask

callback

SpringBoot 연동

Version Number

SpringBoot & Flyway

특정 migration 실패 대응

migration 을 실행했으나, 이미 누군가가 수동으로 마이그레이션을 진행한 상황이라서 migration history 가 실패했거나 존재하지않는 상황일 때 대응하는 방법

migration history는 생성됐으나 success = 0

-- 먼저 데이터 확인
SELECT * FROM flyway_schema_history WHERE version = <실패한MIGRATION버전>;
 
-- 성공으로 강제 update
UPDATE flyway_schema_history SET success = 1 WHERE version = <실패한MIGRATION버전>;

migration history 자체가 생성이 안 됨

-- MySQL 기준임.
-- local db 에서
SELECT concat(
    'SET @max_rank = (select MAX(installed_rank) from flyway_schema_history);\n',
    'INSERT INTO flyway_schema_history ',
    'SET',
    ' installed_rank = @max_rank + 1',
    ', version = ', fsh.version,
    ', description = ''', fsh.description, '''',
    ', type = ''', fsh.type, '''',
    ', script = ''', fsh.script, '''',
    ', checksum = ''', fsh.checksum, '''',
    ', installed_by = CURRENT_USER()',
    ', installed_on = now()',
    ', execution_time = ', fsh.execution_time,
    ', success = ', fsh.success,
    ';')
FROM flyway_schema_history fsh WHERE version = <실패한MIGRATION버전>;
 
-- 실제 flyway를 적용할 DB에서 위 쿼리를 실행해서 나온 SQL 문을 실행해주면 된다.

migration history 자체가 생성이 안 됨 - skipExecutingMigrations

flyway {
    skipExecutingMigrations = true
}