-
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;
![스크린샷 2021-09-07 오후 4 38 15](https://user-images.githubusercontent.com/51393021/132304338-db1525fe-3582-4741-8fea-dcbe1e93788b.png)
공식 문서에선 UNDO 태스크를 제공하지만, community 버전에선 지원하지 않는다. 대안으로, 롤백해야 되는 스키마와 DDL을 다음 버전으로 만들어 커밋하는 방법이 있다.
- Member에서 a라는 칼럼을 삭제하는 예시
public class Member {
...
/*
* @Column
* private String a;
*/
...
V3__delete_column_a.sql
alter table member drop column a;
![스크린샷 2021-09-07 오후 4 44 15](https://user-images.githubusercontent.com/51393021/132305097-4056d4a6-80b2-4e92-9a95-5c1972d533b6.png)
- 현재 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 프로필 설정 후 애플리케이션 실행
![스크린샷 2022-09-26 오후 2 44 03](https://user-images.githubusercontent.com/25394140/192201928-3a4d9171-0a3a-4799-ad6f-6a418476743f.png)
- flyway 정상 작동 확인
![스크린샷 2022-09-26 오후 2 46 20](https://user-images.githubusercontent.com/25394140/192202215-6ae9ccbc-8a4c-42eb-acf5-c12fbb7b0883.png)
-
docker로 mysql 세팅후 local 프로필에서만 동작하는 DataLoaderApplicationListener로 더미 데이터 추가 시 아래의 예외가 발생
-
역량 추가하는 부분에서 예외 발생
-
원인을 정확히 찾기 힘들어서 flyway 프로필을 새로 생성해 DataLoaderApplicationListener를 실행하지 않도록 설정 (추후 원인 파악 후 수정 필요)