> Java > Java베이스 > Flyway 사용에 대한 자세한 지침

Flyway 사용에 대한 자세한 지침

Guanhui
풀어 주다: 2020-07-28 18:31:38
앞으로
3813명이 탐색했습니다.

Flyway 사용에 대한 자세한 지침

1. 개발 중 데이터베이스 관리 시 발생하는 문제:

현재 개발은 일반적으로 팀에서 수행하므로 프로젝트 동기화 문제는 SVN 도구를 통해 관리할 수 있습니다. 데이터베이스 동기화는 어떻습니까? 이상적으로는 새 프로젝트를 개발할 때 먼저 비즈니스를 명확히 하고 데이터베이스 테이블을 설계한 다음 유지 관리를 위해 데이터베이스를 전문 인력에게 넘겨 데이터베이스 동기화 문제가 발생하지 않도록 하는 것입니다. 그러나 실제 상황은 어떠한가? 프로젝트 시작부터 끝까지 요구사항이 계속 바뀌는데, 데이터베이스 유지 관리 전담 인력이 없는 경우가 많아 모두가 적시에 코드를 업데이트하면 괜찮습니다. 시간. 데이터베이스, 의사소통이 제때에 이루어지지 않으면 하하(스스로 결정하시면 됩니다). . . 이러한 방식으로 데이터베이스 동기화 문제가 강조됩니다.

2. Flyway에 대한 간략한 소개:

1. 개념:

Flyway는 데이터베이스와 독립적으로 데이터베이스 변경 사항을 적용, 관리, 추적하는 데이터베이스 버전 관리 도구입니다. 일반인의 관점에서 보면 SVN이 여러 사람의 코드를 관리하는 것처럼 Flyway는 여러 사람의 SQL 스크립트를 관리하여 데이터베이스 동기화를 달성할 수 있습니다.

2. 지원되는 데이터베이스 유형:

Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL(Amazon RDS 포함), MariaDB, Google Cloud SQL, PostgreSQL(Amazon RDS 및 Heroku 포함), Redshift, Vertica , H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE 및 Phoenix.

3. SQL 스크립트의 명명 규칙:

V+버전 번호(버전 번호의 숫자는 "." 또는 "_"로 구분됨)+이중 밑줄(버전 번호와 설명을 구분하는 데 사용됨)+파일 설명 +접미사 이름(예: V2017.9.30__Update.sql).

참고: 버전 번호는 동일할 수 없습니다!

4. SQL 스크립트를 읽는 Flyway의 기본 위치:

프로젝트 소스 폴더 아래의 db/migration 디렉터리.

5. 명령:

총 6개의 기본 명령이 있습니다: 마이그레이션, 정리, 정보, 유효성 검사, 기준선, 복구.

3. Flyway의 장점:

1. SQL 스크립트를 지원할 뿐만 아니라 데이터베이스(flyway-core-x.x.x.jar)를 직접 작동할 수 있는 Java 코드도 지원합니다.

2. -in;

3. 지원 명령줄

4. Spring 상자와 결합하면 애플리케이션 시작 시 데이터베이스를 자동으로 확인하고 업그레이드하는 기능을 쉽게 구현할 수 있습니다.

4. Flyway 명령줄 도구 사용 방법:

1. flyway-commandlin 버전을 압축을 풀고 로컬로 압축을 풉니다.

  

  2. Flyway의 기본 db /migration 디렉터리에 있는 sql 스크립트가 다른 위치에 있는 경우 conf/flyway.conf 파일에서 flyway.locations를 수정해야 합니다.

3. conf/flyway.conf 파일에서 flyway.url, flyway.user, flyway.password를 상황에 맞게 수정하세요.

4. 명령줄에서 마이그레이션 명령을 실행하세요.

5. Maven 프로젝트와 함께 사용:

1. 종속성 좌표 도입:

<!-- flyway -->
 <dependency>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-core</artifactId>
 <version>4.2.0</version>
 <dependency>
로그인 후 복사

2 SQL 버전 파일을 src/main/resources 디렉터리에 저장합니다. 기본 경로 db /migration)을 작성하고 아래에 sql 파일을 배치합니다.

3. Flyway Java 클래스를 추가합니다:

package com.xxxxxx.flyway;
 
 import javax.sql.DataSource;
 import org.flywaydb.core.Flyway;
 
 public class MigrationSqlite {
 
 private DataSource dataSource;
 
 public void setDataSource(DataSource dataSource) {
 this.dataSource = dataSource;
 }
 
 public void migrate() {
 //初始化flyway类
 Flyway flyway = new Flyway();
 //设置加载数据库的相关配置信息
 flyway.setDataSource(dataSource);
 //设置存放flyway metadata数据的表名,默认"schema_version",可不写
 flyway.setTable("SCHMA_VERSION");
 //设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径,默认"db/migration",可不写
 flyway.setLocations("dataBase/sqlite");
 //设置sql脚本文件的编码,默认"UTF-8",可不写
 flyway.setEncoding("UTF-8");
 
 flyway.migrate();
 }
 }
로그인 후 복사

4. Spring의 3단계에서 Java 클래스를 인스턴스화합니다.

<bean id="MigrationSqlite" class="com.xxxxxx.flyway.MigrationSqlite" init-method="migrate">
 <property name="dataSource" ref="dataSource"></property>
 </bean>
로그인 후 복사

위의 Bean 정의에서 우리는 flywayMigration Bean 인스턴스 A 데이터 소스임을 알 수 있습니다. 주입되고 Flyway의 모든 작업은 이 데이터 소스에 대해 동시에 수행되며 Spring이 Bean을 인스턴스화한 후 Bean의 마이그레이션 메서드를 적극적으로 실행하고 Flyway 업데이트가 수행된다는 것을 init-method 속성을 통해 지정합니다. 이 방법으로 데이터베이스 작업을 실행합니다. 지금까지 우리는 애플리케이션이 시작될 때 Spring이 컨텍스트를 인스턴스화하고 Spring이 flywayMigration 빈을 인스턴스화할 때 Flyway가 자동으로 데이터베이스를 업데이트하는 지점에 도달했습니다.

5. Flyway가 데이터베이스를 업데이트하고 코드 로직이 데이터베이스를 작동할 때 충돌을 처리합니다(아직 본 적이 없으며 온라인에서 찾았으므로 긴급 상황에 대비해 보관하세요):

업데이트 작업 전에 Flyway가 여전히 데이터베이스를 업데이트하는 경우 완료되면 애플리케이션의 다른 로직이 다른 작업에 데이터베이스를 사용하기 시작했으며 이로 인해 애플리케이션에서 많은 버그가 생성되거나 전혀 실행되지 않을 수도 있습니다. 이 문제를 해결하기 위해 Spring의 빈 종속성 원칙을 사용하여 주요 데이터베이스 작업 빈이 flywayMigration 빈에 종속되도록 할 수 있으므로 flywayMigration이 인스턴스화될 때까지(데이터베이스 업데이트 작업이 완료될 때까지) 다른 데이터베이스 관련 작업이 수행될 수 없습니다.

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite">
 <property name="dataSource" ref="dataSource" />
 </bean>
로그인 후 복사

이렇게 하면 프로젝트가 시작될 때마다 데이터베이스가 자동으로 업데이트되므로 데이터베이스가 동기화되지 않을까 걱정할 필요가 없습니다.

추천 튜토리얼: "Java Tutorial"

위 내용은 Flyway 사용에 대한 자세한 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jb51.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿