1. 소개
프로젝트 데이터베이스 테이블 구조의 연속적인 반복을 통해, 데이터가 변경된다. 그리고 심지어 일부 사업은 여러 버전 환경에서 병렬로 실행합니다. 데이터는 시대의 왕 데이터베이스 버전이 급선무가되었다 관리 할 수 있습니다. 어떻게 내가 좋아 할 수있는 망할 놈의 버전 관리 도구는 데이터베이스를 관리 하시겠습니까? 자바는 일반적으로 항목을 사용 철새 이동 경로 및 Liquibase을 데이터베이스 버전을 관리 할 수 있습니다. 어떤 이동 경로 상대적으로 인기.
2. 이동 경로 기능
이동 경로 는 다음과 같은 장점을 가지고 있기 때문에 인기가 있습니다 :
- 간단하고 설치 및 마이그레이션는 개발자를 받아들이 또한 매우 간단하지만, 매우 쉽게 배울.
- 특정 이동 경로는 데이터베이스 마이그레이션 아웃, 버전 제어 및 다른 부작용에 초점을 맞추었다.
- 강력한 연속 전달 및 설계를위한 설계. 응용 프로그램이 시작될 때 이동 경로 마이그레이션 데이터베이스를 보자.
3. 이동 경로 작동 메커니즘
이동 경로가 해야 할 DB
첫 번째 중 하나 만들 metadata
테이블 (이름이 기본 테이블을 flyway_schema_history
각각 테이블에 보유) migration
레코드 (마이그레이션), 기록에 포함 된 migration
버전 번호 및 스크립트 의 SQL 스크립트의 checksum
값을. 아래 그림은 데이터베이스 버전의 복수를 보여줍니다.
해당 metadata
테이블 기록 :
installed_rank | 번역 | 기술 | 유형 | 스크립트 | 검사 | installed_by | installed_on | 실행 시간 | 성공 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 초기 설정 | SQL | V1__Initial_Setup.sql | 1,996,767,037 | 악셀 | 2016년 2월 4일 22 : 23 : 00.0 | (546) | 참된 |
이 | 이 | 먼저 변경 | SQL | V2__First_Changes.sql | 1,279,644,856 | 악셀 | 2016년 2월 6일 09 : 18 : 00.0 | 127 | 참된 |
이동 경로의 클래스 경로는 파일 시스템을 검사 또는 응용 프로그램 읽기 DDL 및 DML을 마이그레이션. 에 따르면 metadata
마이그레이션 테이블을 확인합니다. 스크립트 구문의 버전 번호보다 작거나 현재 버전의 동일한 버전 번호 중 하나로 표시되어 있으면, 그것은 그들을 무시합니다. 응용 프로그램을 사용할 수 있지만 : 나머지 마이그레이션은 마이그레이션 보류 중입니다. 마지막으로, 버전 번호와 정렬 그들에 의해 실행에있어서 실행 순서 표 메타 데이터에 초래한다.
해당 metadata
테이블 기록 :
installed_rank | 번역 | 기술 | 유형 | 스크립트 | 검사 | installed_by | installed_on | 실행 시간 | 성공 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 초기 설정 | SQL | V1__Initial_Setup.sql | 1,996,767,037 | 악셀 | 2016년 2월 4일 22 : 23 : 00.0 | (546) | 참된 |
이 | 이 | 먼저 변경 | SQL | V2__First_Changes.sql | 1,279,644,856 | 악셀 | 2016년 2월 6일 09 : 18 : 00.0 | 127 | 참된 |
삼 | 2.1 | 리팩토링 | JDBC | V2_1__Refactoring | 악셀 | 2016년 2월 10일 | 17 : 45 : 05.4 | (251) | 참된 |
이동 경로는 명령 행 (명령 줄 도구를 다운로드해야) 및 지원 자바 API를 또한 빌드 도구 지원, 메이븐 및 Gradle을을 . 여기에서 우리는 볼 것이다 자바 API 에.
3. 이동 경로 규칙
이동 경로 두 비교하는 방법 SQL의 순서가 파일? 그것은 사용 왼쪽 정렬 원칙, 대체 0의 부재를 . 몇 가지 예 :
버전 1.0.1 이상 1.0.1.1.
1.0.9.4 버전보다 높은 1.0.10.
버전 번호 1.0.010 및 1.0.10 무시 될 각 섹션에 0을 선두의 버전 번호의 높은.
이동 경로 에 SQL의 에 파일 버전 화 , 반복 및 취소 세 가지 유형 :
- 버전 업그레이드 버전, 각 버전에는 고유 한 버전 번호가 한 번만 수행 할 수 있습니다.
- 반복이 때, 반복적으로 수행 할 수 있습니다 이동 경로가 감지 반복 유형의 SQL 스크립트
checksum
, 변경 될 수 있습니다 철새 이동 경로는 스크립트를 다시 적용됩니다. 그것은 종류의 업데이트 된 버전이 아닌migration
항상 버전 화는 단지 실행 후에 수행된다. - 취소 마이그레이션을 제공합니다 버전의 동일한 버전에 영향을 취소 할 수 있습니다. 그러나, 롤백은 일반적으로 권장되지 않습니다, 너무 기계, 너무 거친. 일반 권장 버전 지정된 해결하는 모드.
이름 지정 규칙이 세 아래와 같이 :
- 접두사 구성 접두사 기본값은 식별
V
표시 v 전화를 ,R
대표 반복 ,U
대표 취소를 - 버전은 하나 개 이상의 숫자로 구성되는 버전 번호, 디지털 가능한 점 사이 세퍼레이터 식별
.
또는 밑줄_
- 세퍼레이터 버전 ID 및 설명 정보를 분리하기 위해 구성 될 수 있고, 기본 두 밑줄이고
__
- 설명 된 기술 정보는 밑줄로 될 수
_
또는 공간구분
- 접미사 를 구성 할 수 있습니다, 이후의 식별, 기본
.sql
4. 봄 부팅 통합 철새 이동 경로
봄 부팅 제공 이동 경로가 자동으로 구성. 우리가 상자 밖으로 할 수 있도록 이동 경로 데이터베이스 버전 제어 할 수 있습니다.
4.1 이동 경로는 의지
당신은에 의존 소개합니다 :
<!-- 无需版本号 -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
复制代码
물론, 당신은 당신의 관계형 데이터베이스 환경을 통합하려는. 여기에 우리가 사용하는 수소 하지만 다른 방언으로, 다른 데이터베이스 같은 방법을 보여 데이터베이스. 익숙하지 H2의 데이터베이스는 제 기능 문서에서 찾을 수 있습니다 H2 데이터베이스 통합 및 사용 : 봄 부팅이 전투 .
4.2 이동 경로 구성
에서 처음으로 직관적 인 구성을 설명하기 위해 봄 부트 구성 파일을 application.yml
우리는 구성 H2의 데이터베이스를 :
spring:
datasource:
# h2 驱动
driver-class-name: org.h2.Driver
# h2 数据库 持久化到磁盘D:/h2 库名: flyway mysql模式
url: jdbc:h2:file:D:/h2/flyway;MODE=MySQL;DATABASE_TO_LOWER=TRUE
h2:
# 开启console 访问 默认false
console:
enabled: true
settings:
# 开启h2 console 跟踪 方便调试 默认 false
trace: true
# 允许console 远程访问 默认false
web-allow-others: true
# h2 访问路径上下文
path: /h2-console
复制代码
이동 경로에 해당하는 구성 :
# 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
复制代码
읽어주십시오 이동 경로의 구성 관련 지침을.
4.3 초기화 스크립트 작성 SQL
의는 초기화 만들어 보자 SQL의 파일의 H2의 데이터베이스는 자동으로 초기화 된 스키마를 flyway
추가 할 sys_user
테이블을. 명명 규칙을 유의하시기 바랍니다 . 스크립트 이름 V1.0.1__Add_table_user.sql
. SQL의 의 구성 스크립트의 위치 spring.flyway.locations
는 다음. 말한다 :
use `flyway`;
CREATE TABLE `sys_user`
(
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(1024) NOT NULL unique ,
`encode_password` varchar(1024) NOT NULL,
`age` int(3) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;
insert into flyway.sys_user values (1,'Felordcn','{noop}12345',18);
复制代码
시작 봄 부팅 응용 프로그램을. 열기 H2의 데이터베이스 콘솔 http://localhost:8080/h2-console
의에서 JDBC의 URL의 열 및 붙여 넣기 jdbc:h2:file:D:/h2/flyway;MODE=MySQL;DATABASE_TO_LOWER=TRUE
및 클릭 한 Connect
다음 인터페이스를 입력 버튼 :
여기 -1
때문에 우리의 기본값은 이동 경로가 의 필요 flyway_schema_history
테이블. 0
때문에 H2의 데이터베이스가 자동으로 초기화 스키마를 flyway
다른 데이터베이스는 수동으로 구축해야 할 수도 있습니다.
4.4 쓰기 SQL 변경 스크립트
우리는 쓰기 V1.0.0__Delete_sysuser_felordcn.sql
삭제 V1.0.1__Add_table_user.sql
초기화 사용자. 당신은 우리가 수표를 열 때문에, 시작을 주어지고 있음을 발견 할 것이다, 그래서 논리 잘못된 버전의 예외가 발생합니다 . 우리는에 버전 번호가 변경됩니다 V1.0.2__Delete_sysuser_felordcn.sql
다시 시작합니다. 하여 H2의 데이터베이스 콘솔 우리는 변경 로그 이상을 발견 할 것이다 :
그동안 sys_user
데이터 테이블은 기대와 일치 아니다.
5. 이동 경로 모범 사례
위의 설명을 통해 나는 당신이 곧 사용할 것으로 예상 이동 경로 데이터베이스 버전 제어를. 여기에 실제 개발 경험을 요약 한 것입니다 :
- 생산을 금지해야합니다
spring.flyway.cleanDisabled=false
. - 실행 취소 모드를 사용하지 않도록하십시오.
- 멀티 레벨 이름을 개발 가능한 버전 번호는 팀에 따라 혼란을 방지 할 수 있습니다. 예를 들어
V1.0.1__ProjectName_{Feature|fix}_Developer_Description.sql
,이 이름은 자세한 내용은 스크립트 개발자 및 관련 기능을 얻을 수 있습니다. spring.flyway.outOfOrder
생산 가치 사용하여true
개발에 사용을false
.- 일반적인 데이터베이스 시스템의 다수의
schema
구성을spring.flyway.table
다른 시스템은 서로 다른 설정metadata
의 기본 값이 아닌 테이블을flyway_schema_history
.
6. 요약
오늘, 우리는 데이터베이스 버전 철새 이동 경로 마이그레이션 관리 도구를 소개하고, 봄 부팅과 결합된다. 이것은 크게, 우리의 데이터베이스 관리를 표준화 생산 효율을 향상시킬 수 있습니다. 또한 몇 가지 매우 유용한 실무 경험을 공유했습니다.
** DEMO 번호로 대중의 관심에 관한 : Felordcn
회신을 flyway
획득. **
关注公众号:Felordcn获取更多资讯