-
Notifications
You must be signed in to change notification settings - Fork 28
flyway 개요와 활용법
정진혁 edited this page Sep 27, 2022
·
2 revisions
build.gradle
implementation 'org.flywaydb:flyway-core:6.4.2'
application.yml
spring:
flyway:
baselineOnMigrate: true // 베이스라인을 기준으로 시작한다.
locations: classpath:db/migration/prod //버전 파일들의 위치. 디폴트는 main/java/resources/db/migration
enabled: true // 플라이웨이 버전 검사 및 새로운 버전의 sql 실행 여부를 결정
flyway 의존성을 받아주고, 스프링에서 세가지의 설정을 해준다.
버전에 적용되어야 할 sql은 locations에 적어준 디렉토리, resources/db/migration/prod
에 변경해야할 스키마 및 데이터 처리 쿼리를 적어주면 된다.
- Member에 a라는 칼럼을 추가하는 예시
public class Member {
...
@Column
private String a;
...
migrate sql 파일이름 양식 : V{버전명}__{상세내용}.sql (중간 언더바는 두 개여야 인식한다 __)
V2__add_column_a.sql
alter table member add a varchar(255) null;
공식 문서에선 UNDO 태스크를 제공하지만, community 버전에선 지원하지 않는다. 대안으로, 롤백해야 되는 스키마와 DDL을 다음 버전으로 만들어 커밋하는 방법이 있다.
- Member에서 a라는 칼럼을 삭제하는 예시
public class Member {
...
/*
* @Column
* private String a;
*/
...
V3__delete_column_a.sql
alter table member drop column a;
- 현재 dev와 prod는 ddl-auto : validate 이므로, 테이블 스키마와 객체 필드간의 연관관계가 틀리다면 서버가 실행되지 않는다.
ERROR [org.springframework.boot.SpringApplication.reportFailure]:871]
> Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' ... Schema-validation: missing column [a] in table [member]
- docker 폴더에서 아래의 명령어를 입력해 mysql 실행
docker-compose -p prolog up -d
- flyway 프로필 설정 후 애플리케이션 실행
- flyway 정상 작동 확인
-
docker로 mysql 세팅후 local 프로필에서만 동작하는 DataLoaderApplicationListener로 더미 데이터 추가 시 아래의 예외가 발생
-
역량 추가하는 부분에서 예외 발생
-
원인을 정확히 찾기 힘들어서 flyway 프로필을 새로 생성해 DataLoaderApplicationListener를 실행하지 않도록 설정 (추후 원인 파악 후 수정 필요)