Flyway 의 간단 한 소개 및 사용 상세 설명

5827 단어 Flyway쓰다
1.개발 시 데이터베이스 관리 에 발생 하 는 문제:
현재 개발 은 일반적으로 팀 개발 입 니 다.그러면 프로젝트 동기 화 문제 가 발생 할 수 있 습 니 다.코드 동기 화 는 SVN 도 구 를 통 해 관리 할 수 있 습 니 다.그러면 데이터 베 이 스 를 동기 화하 면 어떻게 합 니까?이상 적 인 상황 에서 새로운 프로젝트 를 개발 할 때 먼저 업 무 를 정리 하고 데이터 베 이 스 를 디자인 한 다음 에 데이터 베 이 스 를 전문 적 인 인원 에 게 맡 기 면 데이터 베 이 스 를 동기 화 하 는 문제 가 존재 하지 않 는 다.그런데 실제 상황 은 요?수 요 는 프로젝트 시작 부터 프로젝트 끝 날 때 까지 계속 바 뀌 었 습 니 다.많은 회사 에서 전문 적 인 데이터 베이스 관리자 가 없 었 습 니 다.데이터 베 이 스 를 모두 조작 하고 수정 하고 있 습 니 다.만약 에 팀 간 의 소통 이 신속 하고 괜 찮 으 면 모두 코드 를 업데이트 하 는 김 에 데이터 베 이 스 를 업데이트 합 니 다.만약 에 의사 소통 이 신속 하지 않 으 면 하하(모두 스스로 뇌 보).이렇게 데이터베이스 가 동기 화 되 지 않 는 문제 가 두 드 러 졌 다.
2.Flyway 의 간단 한 소개:
1.개념:
Flyway 는 데이터베이스 에 독립 된 응용,관리 및 데이터베이스 변경 을 추적 하 는 데이터베이스 버 전 관리 도구 입 니 다.쉽게 말 하면 Flyway 는 SVN 이 다른 사람의 코드 를 관리 하 는 것 처럼 다른 사람의 sql 스 크 립 트 를 관리 하여 데이터 베 이 스 를 동기 화 할 수 있 습 니 다.
2.지원 하 는 데이터베이스 종류:
Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix。
3.sql 스 크 립 트 의 이름 규범:
V+버 전 번호(버 전 번호 의 숫자 간 에"."또는""분리)+더 블 밑줄(버 전 번호 와 설명 을 구분 하 는 데 사용)+파일 설명+접미사 이름,예 를 들 어 V 2017.9.30Update.sql。
주:버 전 번 호 는 같 을 수 없습니다!
4.Flyway 에서 sql 스 크 립 트 를 읽 는 기본 위치:
프로젝트 의 원본 폴 더 아래 db/migration 디 렉 터 리 입 니 다.
5.지령:
모두 6 개의 기본 명령:migrate,clean,info,vaidate,baseline,repair.
3.Flyway 의 장점:
1.sql 스 크 립 트 뿐만 아니 라 자바 코드 가 데이터베이스(flyway-core-x.x.x.jar)를 직접 조작 하 는 것 도 지원 합 니 다.
2.Maven 플러그 인 이 있 습 니 다.
3.명령 행 지원;
4.Spring 상자 와 결합 하여 응용 시작 시 자동 으로 데이터 베 이 스 를 검사 하고 업그레이드 하 는 기능 을 편리 하 게 실현 합 니 다.
4.Flyway 명령 행 도구 사용:
1.스트레스 를 풀 고 flyway-commandlin 버 전 을 다운로드 하고 로 컬 로 압축 을 풀 며 구조 도 는 다음 과 같다.
  
2.sql 스 크 립 트 를 Flyway 기본 db/migration 디 렉 터 리 에 두 고 다른 위치 에 두 려 면 conf/flyway.conf 파일 의 flyway.locations 를 수정 해 야 합 니 다.
3.conf/flyway.conf 파일 의 fly way.url,fly way.user,fly way.password 를 자신의 상황 에 따라 수정 합 니 다.
4.명령 행 에서 migrate 명령 을 실행 합 니 다.
5.Maven 프로젝트 와 결합 하여 사용:
1.의존 좌표 도입:

<!-- flyway -->
 <dependency>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-core</artifactId>
 <version>4.2.0</version>
 <dependency> 
2.src/main/resources 디 렉 터 리 에 sql 버 전 파일 을 저장 하 는 경 로 를 만 듭 니 다.dataBase/sqlite(기본 경로 db/migration 을 쓸 수도 있 습 니 다)를 만 들 고 sql 파일 을 아래 에 놓 습 니 다.

3.flyway 의 자바 류 증가:

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 에서 세 번 째 단계 의 자바 류 를 예화 합 니 다.

<bean id="MigrationSqlite" class="com.xxxxxx.flyway.MigrationSqlite" init-method="migrate">
 <property name="dataSource" ref="dataSource"></property>
 </bean>
위의 bean 정의 에서 볼 수 있 듯 이 우 리 는 fly way Migration 이라는 bean 인 스 턴 스 에 데이터 원본 을 주입 하고 Flyway 의 모든 작업 은 이 데이터 원본 에 대해 진 행 될 것 입 니 다.이 동시에 저 희 는 init-method 속성 을 통 해 Spring 이 이 bean 을 예화 한 후에 이 bean 의 migrate 방법 을 주동 적 으로 실행 하고 이 방법 에서 Flyway 가 데이터 베 이 스 를 업데이트 하 는 작업 을 수행 할 것 입 니 다.이로써 우 리 는 응용 프로그램 이 시 작 될 때 Spring 의 컨 텍스트 를 예화 할 때 Spring 이 fly way Migration 이라는 bean 을 예화 할 때 Flyway 업데이트 데이터 베 이 스 를 자동 으로 실행 합 니 다.
5.Flyway 가 데이터 베 이 스 를 업데이트 하고 코드 논리 로 데이터 베 이 스 를 조작 할 때의 충돌 을 처리 합 니 다(자신 이 현재 만 나 지 못 했 습 니 다.인터넷 에서 찾 은 것 은 불 시의 필요 에 대비 합 니 다).
만약 에 Flyway 가 데이터 베 이 스 를 업데이트 하고 업데이트 작업 이 완료 되 기 전에 응용 프로그램의 다른 논 리 는 데이터 베 이 스 를 사용 하여 다른 작업 을 하기 시 작 했 기 때문에 응용 프로그램 에 많은 bug 가 생 겨 서 심지어 실행 되 지 못 할 수도 있 습 니 다.이 문 제 를 해결 하려 면 Spring 의 bean 의존 원 리 를 이용 하여 관건 적 인 데이터 베이스 작업 bean 을 fly way Migration 이라는 bean 에 의존 하 게 할 수 있 습 니 다.fly way Migration 이 정례 화 되 지 않 기 전에 다른 데이터 라 이브 러 리 와 관련 된 작업 을 할 수 없습니다.

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite">
 <property name="dataSource" ref="dataSource" />
 </bean>
이렇게 하면 프로젝트 를 시작 할 때마다 자동 으로 데이터 베 이 스 를 업데이트 하 므 로 데이터 베 이 스 를 동기 화하 지 않 아 도 된다.
참고 글:
1https://flywaydb.org/documentation/(홈 페이지)
2、 http://casheen.iteye.com/blog/1749916
3、 http://shuzheng5201314.iteye.com/blog/2044517
4、 https://www.jb51.net/article/191708.htm
플라이 웨 이에 대한 간단 한 소개 와 사용 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 플라이 웨 이에 관 한 간단 한 소개 와 사용 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기