flyway 자바 자동 업그레이드 SQL 스 크 립 트 문제 및 해결 방법
11843 단어 자바업그레이드SQL 스 크 립 트
일상적인 개발 에서 우 리 는 다음 과 같은 문제 에 자주 부 딪 힌 다.
프로젝트 수요 의 변화 나 초기 디자인 결함 으로 인해 후기 에 데이터 베 이 스 를 수정 해 야 한다.이것 은 비교적 흔히 볼 수 있 는 일이 다.만약 에 프로젝트 가 아직 출시 되 지 않 았 다 면 시 계 를 삭제 하고 다시 만 들 수 있 지만 프로젝트 가 출시 되 었 다 면 이렇게 간단 하고 거 칠 어 서 는 안 된다.매번 에 프로젝트 를 운영 할 때마다 SQL 파일 을 수 동 으로 실행 해 야 한다.SQL 스 크 립 트 를 통 해 기 존 데이터 시트 를 바탕 으로 업그레이드 해 야 합 니 다.
flyway 가 있 으 면 이 문제 들 은 모두 잘 해 결 될 수 있다.
Flyway 를 사용 한 후 데이터베이스 버 전 업 그 레이 드 를 진행 하려 면 이전 데이터베이스 스 크 립 트 를 사용 하지 않 고 새로운 데이터베이스 스 크 립 트 를 만 듭 니 다.프로젝트 가 시 작 될 때 더 높 은 버 전의 스 크 립 트 를 감지 하면 자동 으로 실 행 됩 니 다.그러면 다른 동료 와 작업 할 때 도 편리 합 니 다.정상적으로 우 리 는 모두 Git 에서 코드 를 끌 어 내리 고 데이터베이스 스 크 립 트 를 끌 어 내리 지 않 기 때문에 누군가가 데이터 베 이 스 를 업데이트 하면 다른 동료 들 이 반드시 최신 통 지 를 받 을 수 있 는 것 이 아니 라 Flyway 를 사용 하면 이 문 제 를 효과적으로 피 할 수 있 습 니 다.
모든 스 크 립 트 가 실행 되면 fly wayschema_history 표 에 기록 되 어 있 습 니 다.실수 로 잘못 되면 fly way 에서 수 동 으로schema_history 표 에서 기록 을 삭제 하고 SQL 스 크 립 트 를 수정 한 후 다시 시작 합 니 다(생산 환경 은 권장 하지 않 습 니 다).
Flyway 는 어떻게 일 합 니까?
Flyway 작업 절 차 는 다음 과 같 습 니 다.
1.프로젝트 가 시작 되 고 응용 프로그램 이 데이터베이스 연결 풀 을 만 든 후에 Flyway 가 자동 으로 실 행 됩 니 다.
2.처음 사용 할 때 Flyway 는
flyway_schema_history
표를 만들어 sql 실행 기록 을 기록 합 니 다.3.Flyway 는 프로젝트 가 지정 한 경로(기본 값
classpath:db/migration
)의 모든 sql 스 크 립 트 를 스 캔 하여 flyway_schema_history
표 스 크 립 트 기록 과 비교 합 니 다.데이터베이스 기록 이 실 행 된 스 크 립 트 기록 이 프로젝트 의 sql 스 크 립 트 와 일치 하지 않 으 면 Flyway 가 잘못 보고 하고 프로젝트 실행 을 중단 합 니 다.4.검증 이 통과 되면 표 의 sql 에 따라 최대 버 전 번 호 를 기록 하고 모든 버 전 번 호 는 이 버 전의 스 크 립 트 보다 크 지 않 습 니 다.버 전 번호 에 따라 어 릴 때 부터 나머지 스 크 립 트 를 하나씩 실행 합 니 다.
프로젝트 에 Flyway 사용 하기
우선,pom 파일 에 flyway 의 핵심 의존 패 키 지 를 도입 합 니 다.
1.핵심 의존 팩 도입:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.2.4</version>
</dependency>
여 기 는 5.2.4 버 전 을 사용 합 니 다.테스트 를 통 해 7.0.0 버 전 은 현재 우리 가 사용 하고 있 는 springboot 버 전과 충돌 하여 fly way 가 실행 되 지 않 을 수 있 습 니 다.따라서 우 리 는 가능 한 한 높 은 버 전의 flyway 를 사용 하지 않 는 다.
2.프로필:
속성 을 간단하게 설정 하면 사용 할 수 있 습 니 다.
# flyway
spring:
flyway:
# flyway
enabled: true
# flyway clean schema table, 。 false 。
clean-disabled: true
# SQL , classpath:db/migration
locations: classpath:db/migration
# metadata flyway_schema_history
table: flyway_schema_history
# flyway_schema_history metadata , flyway migrate , flyway baseline
# true flyway baseline , baseline。
baseline-on-migrate: true
# baseline , 1, SQL , migrate
baseline-version: 1
# UTF-8
encoding: UTF-8
# true false
out-of-order: false
# flyway schema list, flyway , spring.datasource.url schema,
# schema, schema metadata , schema migration sql .
# flyway Clean schema . spring.flyway.clean-disabled true
schemas: flyway
# DML DDL
validate-on-migrate: true
flyway 의 properties 설정 목록(속성 미 테스트):
# .
flyway.baseline-description
# schema , , , false.
flyway.baseline-on-migrate =false
# schema , 1.
flyway.baseline-version=1
# , false.
flyway.check-location=false
# clean, false.
flyway.clean-on-validation-error=false
# flywary, true.
flyway.enabled=true
# , UTF-8.
flyway.encoding
# , false.
flyway.ignore-failed-future-migration
# SQL.
flyway.init-sqls
# , db/migration.
flyway.locations
# , false.
flyway.out-of-order
# .
flyway.password
# placeholder , ${.
flyway.placeholder-prefix
# , true.
flyway.placeholder-replacementplaceholders
# placeholder , }.
flyway.placeholder-suffix
# placeholder value
flyway.placeholders.[placeholder name]
# flywary schema, , schema.
flyway.schemas
# , V.
flyway.sql-migration-prefix
# , __
flyway.sql-migration-separator
# , .sql
flyway.sql-migration-suffix
# , schema_version
flyway.tableflyway
# , latest version
flyway.target
# JDBC URL, ,
flyway.url
#
flyway.user
# , true
flyway.validate-on-migrate
fly way 의 yml 설정 목록(테스트 되 었 습 니 다.문제 없습니다.yml 형식의 설정 파일 을 추천 합 니 다)
# flyway
spring:
flyway:
# flyway
enabled: true
# flyway clean schema table, 。 false 。
clean-disabled: true
# SQL , classpath:db/migration
locations: classpath:db/migration
# metadata flyway_schema_history
table: flyway_schema_history
# flyway_schema_history metadata , flyway migrate , flyway baseline
# true flyway baseline , baseline。
baseline-on-migrate: true
# baseline , 1, SQL , migrate
baseline-version: 1
# UTF-8
encoding: UTF-8
# true false
out-of-order: false
# flyway schema list, flyway , spring.datasource.url schema,
# schema, schema metadata , schema migration sql .
# flyway Clean schema . spring.flyway.clean-disabled true
schemas: flyway
# DML DDL
validate-on-migrate: true
spring.flyway.clean-disabled:이 속성 은 매우 중요 합 니 다.라 이브 러 리 에 있 는 시 계 를 지 울 지 여 부 를 표시 합 니 다.실행 중인 스 크 립 트 가 V1 이면xxx.sql,그러면 기 존 라 이브 러 리 에 있 는 시 계 를 제거 한 다음 에 스 크 립 트 를 실행 합 니 다.이것 은 개발 환경 에서 매우 편리 하지만 생산 환경 에서 죽 을 지경 입 니 다.그리고 기본적으로 제거 해 야 합 니 다.생산 환경 은 반드시 스스로 true 로 설정 해 야 합 니 다.3.db/migration 생 성
flyway 는 기본적으로 resources/db/migration 의 폴 더 를 읽 기 때 문 입 니 다.이 경 로 를 수정 해 야 한다 면 설정 파일 에서 구현 할 수 있 습 니 다.
4.sql 파일 작성
이 곳 의 SQL 문 구 는 일정한 규범 에 따라 야 합 니 다.그렇지 않 으 면 실행 할 때 flyway 가 잘못 알 릴 수 있 습 니 다.명명 규칙 은 주로 두 가지 가 있다.
V20210707__create_user.sql
,V20210707__add_user.sql
이다.R__truncate_user_dml.sql
.V:고정 대문자
202107.01:20210707 은 날짜 이 고 뒤에.01 로 번 호 를 대표 합 니 다.
flyway 의 집행 은 순서 가 있 기 때 문 입 니 다.예 를 들 어 당신 이 V2021 를 실 행 했 기 때 문 입 니 다.create_user,또 V2020 실행update_user。잘못 보고 할 수 있 는 이 유 는 2020<2021.그래서 우 리 는 번호 가 순서대로 커진다 는 것 을 보증 해 야 한다.
Flyway 는 어떻게 두 SQL 파일 의 우선 순 위 를 비교 합 니까?그것 은 왼쪽 정렬 원칙 을 채택 하고,결 위 는 0 으로 대신한다.몇 가지 예 를 들다.
1.0.1.1 은 1.0.1 버 전보 다 높 았 다.
1.0.10 은 1.0.9.4 버 전보 다 높 았 다.
1.0.10 은 1.0.010 버 전 번호 만큼 높 고 버 전 번호 부분의 선도 0 은 무시 된다.
__:이 건 두 개
create_user 는 간단 한 sql 설명 입 니 다.
.sql:.sql 로 끝 나 는 파일 접 두 사 는 약속 입 니 다.
데이터베이스 에 fly way 라 는 데이터 베 이 스 를 만 들 고 프로젝트 를 시작 하면 fly way 는 sql 파일 을 실행 하고 user 표를 만 들 며 fly way 를 자동 으로 생 성 합 니 다.schema_역사 표
이 시작 로그 에서 우 리 는 Flyway 의 실행 정보,데이터베이스 스 크 립 트 의 실행 을 볼 수 있 으 며,동시에 Flyway 는 fly way 도 만 들 었 다 고 말 했다.schema_history 표,이 표 는 데이터베이스 의 업데이트 역 사 를 기록 하 는 데 사 용 됩 니 다.
flyway_schema_history 에 서 는 sql 파일 의 실행 기록 을 기록 합 니 다.프로젝트 를 시작 할 때마다 fly wayschema_history 는 sql 이 실 행 된 적 이 있 는 지,실 행 된 적 이 없 는 지,이 sql 이 새로운 sql 이라는 것 을 설명 하면 자동 으로 실 행 됩 니 다.그리고 표 에 기록 합 니 다.
이 기록 이 있 으 면 다음 에 프로젝트 를 시작 합 니 다.V 20210707.01,V 20210707.02,V 20210708.01 이 세 개의 스 크 립 트 파일 은 실행 되 지 않 습 니 다.시스템 은 이 스 크 립 트 가 이미 실행 되 었 다 는 것 을 알 고 있 기 때 문 입 니 다.이 스 크 립 트 를 다시 실행 시 키 려 면 flyway 를 수 동 으로 삭제 해 야 합 니 다.schema_history 표 의 대응 기록 입 니 다.프로젝트 가 시작 되면 이 스 크 립 트 가 실 행 됩 니 다.
R 로 시작 하 는 파일 과 V 로 시작 하 는 파일 이 약간 다 르 기 때문에 R 로 시작 하 는 파일 은 수정 사항 을 보 내 면 모두 한 번 씩 실 행 됩 니 다.V 로 시작 하 는 파일 이 일반적인 것 을 실행 하고 수정 사항 을 보 내 면 오류 가 발생 합 니 다.버 전 을 제어 하기 위해 서,우 리 는 가능 한 한 V 로 시작 하 는 파일 을 사용 합 니 다.그러면 우 리 는 모든 버 전의 sql 파일 을 똑똑히 볼 수 있 습 니 다.
흔 한 문제
질문
질문
원인:springboot 버 전과 fly way 버 전이 일치 하지 않 으 며,일반적으로 fly way 버 전이 너무 높 습 니 다.
해결 방법:flyway 버 전 을 5.2.4 로 낮 추 면 ok 입 니 다.
문제
springboot 통합 flyway 가 적용 되 지 않 습 니 다.flyway 는 sql 을 자동 으로 실행 하지 않 습 니 다.
원인:위 와 같다
원인 2:프로젝트 에 데이터 베 이 스 를 설정 하지 않 았 고 sq 의존 또는 설정 을 도입 하지 않 았 습 니 다.
해결 방법:위 와 같다
해결 방법 2:sql 의존 도 를 도입 하여 yml 파일 에 sql 정 보 를 설정 합 니 다.
질문
Flyway 오류 Flyway 예외:유효성 검사 실패:감 지 된 실패 한 버 전 으로 의 마 이 그 레이 션
원인:sql 스 크 립 트 와 데이터베이스 에 충돌 이 있 습 니 다.sql 스 크 립 트 가 어디 가 틀 렸 는 지 확인 해 야 합 니 다.쉽게 말 하면 V 로 시작 하 는 sql 파일 입 니 다.이미 실 행 했 습 니 다.fly wayschema_history 표 에 이 데이터 가 있 지만 sql 파일 을 바 꾸 어 다시 실행 할 때 오류 가 발생 했 습 니 다.
해결 방법:sql 파일 을 새로 만 듭 니 다.원래 V 로 시작 하 는 파일 이나 fly way 를 수정 하지 마 십시오.schema_history 표 에서 파일 관련 실행 기록 을 찾 아 삭제 하고 다시 실행 합 니 다.
작가:세상 에 유 료 bug 가 없습니다. 출처:https://www.cnblogs.com/LoveBB/ 본 고의 저작권 은 작가 와 블 로그 원 에 있 습 니 다.전 재 를 환영 하지만 작가 의 동의 없 이 반드시 글 페이지 에 원문 링크 를 제공 해 야 합 니 다.그렇지 않 으 면 법률 적 책임 을 추궁 할 권 리 를 보류 합 니 다.
flyway 가 자바 자동 업그레이드 SQL 스 크 립 트 를 실현 하 는 문제 및 해결 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 자동 업그레이드 SQL 스 크 립 트 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.