이 기사는 데이터베이스 마이그레이션을 가능하게하기 위해 SpringBoot에 Flyway를 사용하는 것을 소개합니다. 그것은 당신과 공유됩니다. 세부 사항은 다음과 같습니다.
먼저 Flyway의 작동 방식을 먼저 이해하겠습니다.
가장 쉬운 솔루션은 빈 데이터베이스를 가리키는 것입니다.
메타 데이터 테이블을 찾으려고합니다. 데이터베이스가 비어 있으면 Flyway에서 찾을 수는 없지만 작성하십시오. 이제 schema_version이라는 단일 빈 테이블이있는 데이터베이스가 있습니다.
이 테이블은 데이터베이스 상태를 추적하는 데 사용됩니다. 그 후 Flyway는 응용 프로그램의 파일 시스템 또는 마이그레이션을 위해 클래스 경로를 스캔하기 시작합니다. SQL 또는 Java로 작성할 수 있습니다.
그런 다음 마이그레이션을 해당 버전 번호로 정렬하고 순서대로 적용하십시오.
각 마이그레이션이 적용되면 메타 데이터 테이블이 다음과 같이 업데이트됩니다.
schema_version
메타 데이터와 초기 상태를 사용하면 이제 최신 버전으로의 마이그레이션에 대해 이야기 할 수 있습니다.
Flyway는 마이그레이션을 위해 응용 프로그램의 파일 시스템 또는 ClassPath를 다시 스캔합니다. 메타 데이터 테이블에 대한 마이그레이션을 점검하십시오. 버전 번호가 현재 버전으로 표시된 버전 번호보다 낮거나 같으면 무시됩니다.
나머지 마이그레이션은 계류 중이며 사용 가능하지만 적용되지 않습니다.
그런 다음 버전 번호별로 정렬하고 차례로 실행합니다.
이 메타 데이터 테이블이 업데이트됩니다.
schema_version
그게 다야! 데이터베이스를 개발해야 할 때마다 구조 (DDL)이든 참조 데이터 (DML)에 관계없이 현재 버전보다 높은 버전 번호의 새 마이그레이션 만 작성하십시오. 다음에 Flyway가 시작될 때, 데이터베이스를 발견하고 업그레이드합니다.
2. SpringBoot에서 Flyway 사용
한 가지 방법은 Hibernate.hbm2ddl.auto 속성을 설정하여 Spring Boot의 spring.jpa.hibernate.ddl-auto 속성을 통해 생성, 드로프 또는 업데이트를 설정하는 것입니다. 예를 들어, Hibernate.hbm2ddl.auto를 설정하려면 Drop을 작성하려면 다음 내용을 Application.yml에 추가 할 수 있습니다.
스프링 : JPA : Hibernate : DDL-Auto : Create-Drop
그러나 응용 프로그램이 데이터베이스를 다시 시작할 때마다 스키마가 비워져 처음부터 재건되기 때문에 이것은 생산 환경에 이상적이지 않습니다. 업데이트하도록 설정할 수는 있지만 프로덕션 환경에는 사용하지 않는 것이 좋습니다.
다른 방법이 있습니다. Schema.sql에서 스키마를 정의 할 수 있습니다. 첫 번째 실행에서는이 작업을 수행하는 데 아무런 문제가 없지만 응용 프로그램이 시작될 때마다 데이터 테이블이 이미 존재하기 때문에이 초기화 스크립트가 실패합니다. 초기화 스크립트를 작성하고 수행 한 작업을 반복하지 않을 때는 추가주의가 필요합니다.
더 나은 옵션은 데이터베이스 마이그레이션 라이브러리를 사용하는 것입니다. 사용 된 일련의 데이터베이스 스크립트 및 레코드를 사용하고 동일한 스크립트를 여러 번 사용하지 않습니다. 응용 프로그램의 각 배포 패키지에는 이러한 스크립트가 포함되어 있으며 데이터베이스는 응용 프로그램과 일치 할 수 있습니다. Spring Boot는 두 개의 인기있는 데이터베이스 마이그레이션 라이브러리에 대한 자동 구성 지원을 제공합니다.
Spring Boot에서 이러한 라이브러리 중 하나를 사용하려면 프로젝트에 해당 종속성을 추가하고 스크립트를 작성하면됩니다. Flyway부터 시작하겠습니다.
1. Flyway를 사용하여 데이터베이스 마이그레이션 프로세스를 정의하십시오
Flyway는 SQL을 사용하여 마이그레이션 스크립트를 정의하는 매우 간단한 오픈 소스 데이터베이스 마이그레이션 라이브러리입니다. 아이디어는 각 스크립트에 버전 번호가 있으며 Flyway는 데이터베이스를 원하는 상태로 가져 오기 위해 이러한 스크립트를 순서대로 실행한다는 것입니다. 또한 실행 된 스크립트 상태를 기록하며 반복되지 않습니다. 여기에서 읽기 목록 응용 프로그램에서 데이터 테이블 및 데이터가없는 빈 데이터베이스로 시작합니다. 따라서이 스크립트는 외국의 주요 제약 조건 및 초기화 데이터를 포함하여 독자 및 예약 테이블을 먼저 만들어야합니다. 코드의 8-2 목록은 빈 데이터베이스에서 사용 가능한 상태로 플라이 웨이 스크립트입니다.
Flyway 데이터베이스 초기 스크립트
테이블 리더를 작성하십시오 (ID Serial Primary Key, Username Varchar (25) 고유 한 NULL, 암호 Varchar (25) NULL, FullName Varchar (50) NOT NULL); 테이블 북 만들기 (ID Serial Dimin Key, varchar (50) NULL NOT NULL, DESCRICTION NULL NOT NULL, ISBN VARCHAR (10) NOT NULL, TITLE VARCHAR (250) NOLL, Reader_USERNAME VARCHAR (25) NOT NULL, FORESERNAME (reader_USERNAME) 참조 리더 (USERNAME); 시퀀스 Hibernate_Sequence를 작성하고 리더 (사용자 이름, 암호, fullName) 값 ( 'Craig', 'Password', 'Craig Walls')에 삽입;
보시다시피, Flyway 스크립트는 SQL입니다. 작동하는 것은 클래스 경로의 위치와 파일 이름입니다. Flyway 스크립트는 모두 그림 8-1과 같이 버전 번호를 포함하는 이름 지정 사양을 따릅니다.
모든 Flyway 스크립트에는 대문자 V로 시작하는 이름과 스크립트의 버전 번호가 있습니다. 두 개의 밑줄과 스크립트에 대한 설명이 이어집니다. 이것은 전체 마이그레이션 프로세스의 첫 번째 스크립트이므로 버전은 1입니다. 설명은 매우 유연 할 수 있으며 주로 스크립트의 목적을 이해하는 데 도움이됩니다. 나중에 데이터베이스에 새 테이블을 추가하거나 기존 데이터 테이블에 새 필드를 추가해야합니다. 버전 번호 2로 다른 스크립트를 만들 수 있습니다. Flyway 스크립트는 Application ClassPath 루트 경로와 관련하여 /db /마이그레이션 경로 아래에 배치해야합니다. 따라서 프로젝트에서 스크립트는 SRC/Main/Resources/DB/Migration에 배치해야합니다. 또한 최대 절전 모드가 데이터 테이블을 생성하지 않도록 spring.jpa.hibernate.ddl-auto를 NONE으로 설정해야합니다. 이것은 Application.yml의 다음 내용과 관련이 있습니다.
스프링 : JPA : 최대 절전 모드 : DDL-AUTO : 없음
남은 것은 Flyway를 프로젝트 의존성으로 추가하는 것입니다. Gradle에서는이 의존성이 다음과 같습니다.
컴파일 ( "org.flywaydb : flyway-core")
Maven 프로젝트에서는 다음과 같습니다.
<pectionency> <groupid> org.flywayfb </groupid> <artifactid> Flyway-Core </artifactid> </fectionency>
응용 프로그램이 배포되고 실행되면 Spring Boot는 클래스 경로의 플라이 웨이를 감지하고 필요한 Bean을 자동으로 구성합니다. Flyway는 /db /마이그레이션의 스크립트를 차례로 보고이 스크립트가 실행되지 않은 경우이 스크립트를 실행합니다. 각 스크립트가 실행되면 schema_version 테이블에 레코드를 작성하십시오. 다음에 응용 프로그램이 시작될 때 Flyway는 먼저 schema_version의 레코드를보고 해당 스크립트를 건너 뛸 것입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.