데이터베이스 마이그레이션 Flyway
Flyway가 필요한 이유
일상적인 개발에서 이런 장면을 자주 볼 수 있다
Flyway 가져오기
Gradle이면
build.gradle
에 의존 추가compile "org.flywaydb:flyway-core:4.1.2"
Maven 에 의존도 추가
pom.xml
org.flywaydb
flyway-core
4.0.3
실제 사용
Spring Boot,Gradle을 사용하여 프로젝트를 구축하고 의존도를 추가합니다.
개발된 프로젝트라면 베이스라인 On Migrate를 켜야 합니다. 그렇지 않으면 이상을 던집니다.
Found non-empty schema(s) `reshelf2` without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
응용 프로그램properties 구성 추가
flyway.baselineOnMigrate=true
물론 인터페이스도 가능하죠.
@Component
public class BaselineOnMigrateMigrationStrategy implements FlywayMigrationStrategy {
@Override
public void migrate(Flyway flyway) {
flyway.setBaselineOnMigrate(true);
flyway.migrate();
}
}
데이터베이스의
schema_version
는 비교 스크립트 버전을 저장하는 표입니다.ql 스크립트 기본 위치
classpath:db/migration
파일ql 끝, 이름 V 자 시작, 뒤 숫자 는 버전 번호 예: V1init.sql 출처
org.flywaydb.core.Flyway
/**
* The locations to scan recursively for migrations.
*
* The location type is determined by its prefix.
* Unprefixed locations or locations starting with {@code classpath:} point to a package on the classpath and may
* contain both sql and java-based migrations.
* Locations starting with {@code filesystem:} point to a directory on the filesystem and may only contain sql
* migrations.
*
* (default: db/migration)
*/
private Locations locations = new Locations("db/migration");
/**
* The encoding of Sql migrations. (default: UTF-8)
*/
private String encoding = "UTF-8";
/**
* The schemas managed by Flyway. These schema names are case-sensitive. (default: The default schema for the datasource connection)
* Consequences:
*
* - The first schema in the list will be automatically set as the default one during the migration.
* - The first schema in the list will also be the one containing the metadata table.
* - The schemas will be cleaned in the order of this list.
*
*/
private String[] schemaNames = new String[0];
/**
* The name of the schema metadata table that will be used by Flyway. (default: schema_version)
By default
* (single-schema mode) the metadata table is placed in the default schema for the connection provided by the
* datasource.
When the flyway.schemas property is set (multi-schema mode), the metadata table is
* placed in the first schema of the list.
*/
private String table = "schema_version";
/**
* The target version up to which Flyway should consider migrations. Migrations with a higher version number will
* be ignored. The special value {@code current} designates the current version of the schema (default: the latest version)
*/
private MigrationVersion target = MigrationVersion.LATEST;
/**
* Whether placeholders should be replaced. (default: true)
*/
private boolean placeholderReplacement = true;
/**
* The map of <placeholder, replacementValue> to apply to sql migration scripts.
*/
private Map placeholders = new HashMap();
/**
* The prefix of every placeholder. (default: ${ )
*/
private String placeholderPrefix = "${";
/**
* The suffix of every placeholder. (default: } )
*/
private String placeholderSuffix = "}";
/**
* The file name prefix for sql migrations. (default: V)
*
* Sql migrations have the following file name structure: prefixVERSIONseparatorDESCRIPTIONsuffix ,
* which using the defaults translates to V1_1__My_description.sql
*/
private String sqlMigrationPrefix = "V";
/**
* The file name prefix for repeatable sql migrations. (default: R)
*
* Repeatable sql migrations have the following file name structure: prefixSeparatorDESCRIPTIONsuffix ,
* which using the defaults translates to R__My_description.sql
*/
private String repeatableSqlMigrationPrefix = "R";
/**
* The file name separator for sql migrations. (default: __)
*
* Sql migrations have the following file name structure: prefixVERSIONseparatorDESCRIPTIONsuffix ,
* which using the defaults translates to V1_1__My_description.sql
*/
private String sqlMigrationSeparator = "__";
/**
* The file name suffix for sql migrations. (default: .sql)
*
* Sql migrations have the following file name structure: prefixVERSIONseparatorDESCRIPTIONsuffix ,
* which using the defaults translates to V1_1__My_description.sql
*/
private String sqlMigrationSuffix = ".sql";
사용자 정의 설정은 가능하지만, 사용하지 않는 것을 권장합니다.
주의: sql 스크립트는 해당하는 버전 번호가 필요합니다. 예를 들어
V2__init.sql
를 실행하려면 V1__init.sql
를 기준으로 비교한 다음에flyway가 해당하는 sql 스크립트를 실행할 수 있습니다.일부 링크
https://flywaydb.org/documentation/gradle/
http://stackoverflow.com/questions/33029311/setting-flyway-baselineonmigrate-and-baselineversion-using-spring-boot-prope
http://stackoverflow.com/questions/30013953/how-to-use-jdbc-authentication-of-spring-boot-spring-security-with-flyway
https://github.com/spark-jobserver/spark-jobserver/issues/503
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.