스프링 부트 속성 파일을 사용하여 Flyway 'baselineOnMigrate' 및 'baselineVersion' 설정
스프링 부트의 플라이웨이 속성입니다.java는 대부분의 Flyway 설정을 지원하지만 'baselineVersion' 또는 'baselineOnMigrate'는 지원하지 않습니다.기존 응용프로그램을 Flyway로 변환하고 있으며 이러한 설정은 이를 위해 설계된 것으로 보입니다.당사의 프로덕션 환경은 고도로 제어되며 이를 위해 명령줄 버전의 플라이웨이를 실행하는 것은 실용적이지 않습니다.
사용자 정의 Flyway @Bean을 만드는 것이 여기서 유일한 옵션입니까?
다음으로 접두사를 지정하는 이동 경로 특성을 설정할 수 있습니다.flyway
의 신의에application.yml/.properties
.
은 것은에의가다니합능에 의해 합니다.org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration.FlywayConfiguration#flyway
달이린으로 .@ConfigurationProperties(prefix = "flyway")
.
사중인경우를 .application.yml
다음을 추가합니다.
spring:
flyway:
baselineOnMigrate: true
를 사용하는 경우application.properties
다음을 추가합니다.
spring.flyway.baselineOnMigrate = true
업데이트: 접두사 추가spring
(@pdem 주석 참조).
그건 불가능해요.저는 이것에 대한 해결책을 찾기 위해 오늘 Spring Boot의 코드를 분석하는 데 시간을 보냈습니다.Flyway에서 이러한 속성을 설정하는 것은 아무 것도 아닙니다.자동 구성.또한 Spring이 Flyway 객체에 대한 구성 메서드를 호출하지 않는다는 것을 알게 되었습니다. Flyway.properties가 작동하는 유일한 다른 옵션입니다.Spring은 flyway.properties를 조금 남용하고 있으며 이 파일을 Flyway에 추가로 제공하는 대신 속성의 소스로 사용합니다.그렇기 때문에 Flyway를 사용할 때 가능한 옵션 집합자동 구성이 너무 제한적입니다.Flyway 사용하기Flyway의 고급 기능이 더 필요한 경우 자동 구성은 좋은 옵션이 아닙니다.하지만 @Bean을 사용하는 것은 여기서 비극이 아닙니다.아래에서는 속성 파일에서 이러한 동작을 구현하는 것이 불가능하다는 @Bean을 사용하는 예를 볼 수 있습니다.
@Profile(value = "!dbClean")
@Bean(name = "flyway", initMethod = "migrate")
public Flyway flywayNotADestroyer() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource());
flyway.setBaselineOnMigrate(true);
return flyway;
}
@Profile(value = "dbClean")
@Bean(name = "flyway", initMethod = "migrate")
public Flyway flywayTheDestroyer() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource());
flyway.setBaselineOnMigrate(true);
flyway.clean();
return flyway;
}
보시다시피, 저는 두 개의 스프링 프로필을 가지고 있습니다.데이터베이스를 치료하지 않는 기본값과 데이터베이스를 완전히 치료하는 기본값입니다.매우 편리합니다.
Flyway Migration Strategy를 사용하는 데 성공했습니다.
@Component
public class BaselineOnMigrateMigrationStrategy implements FlywayMigrationStrategy {
@Override
public void migrate(Flyway flyway) {
flyway.setBaselineOnMigrate(true);
flyway.migrate();
}
}
에 사용할 수 있습니다.application.properties
은 일파, 그나추야합니다를 추가해야 .spring.
이 답변 주석 https://stackoverflow.com/a/39244097/273119 에 표시된 @pdem과 같이 springboot 2의 접두사입니다.
spring.flyway.fly-on-spring=true
플라이웨이를 사용하고 있습니다.5.1.4
이것들을 추가하는 나를 위해.application.properties
일했다 flyway.enabled = true flyway.baseline-on-migrate = true
소스를 파고들어 몇 가지 실험을 실행한 후에 Flyway 클래스에서 setBaselineVersion()이 오버로드되었기 때문에 Spring이 속성 값을 주입할 수 없는 것으로 나타납니다.
flyway.baselineVersionAsString=2로 변경하면 원하는 대로 작동합니다.
세스의 답은 나를 위해 만들어졌습니다.하지만 난 변했어요
flyway.setBaselineOnMigrate(true);
위해서
flyway.baseline();
언급URL : https://stackoverflow.com/questions/33029311/setting-flyway-baselineonmigrate-and-baselineversion-using-spring-boot-prope
'itsource' 카테고리의 다른 글
Gitrebase에 대한 병합 전략을 선택하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
---|---|
커밋 순서 변경 (0) | 2023.06.26 |
Python cx_Oracle용 도커 컨테이너에 Oracle Instant 클라이언트 설치 (0) | 2023.06.26 |
FastAPI + SQLAlchemy - datetime 필드가 있는 테이블에 항목을 게시할 때 잘못된 RequestError가 발생함 (0) | 2023.06.26 |
리포지토리 패턴을 올바르게 사용하는 방법 (0) | 2023.06.26 |