Flyway가 Spring Boot에서 작동하지 않을 때 디버깅하는 방법
Maven과 Spring Boot을 사용하고 있습니다.응용 프로그램을 실행하는 방법mvn spring-boot:run
.
https://flywaydb.org/documentation/plugins/springboot에서는 스프링 부트 시작 시 Flyway를 호출해야 한다고 합니다.
그래서 내 pom.xml에는 Flyway에 대한 의존관계가 포함되어 있습니다.
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.1.2</version>
</dependency>
처음에 Maven 명령어를 실행했을 때 Flyway를 다운받았기 때문에 의존관계가 기능하고 있다고 생각합니다.
다음과 같은 파일이 있습니다.
./src/main/resources/db/migration/V123__foo.sql
./src/main/resources/application.properties
위 글은 '그냥 작동'해야 한다는 것을 암시하고 있습니다만, 데이터베이스의 JDBC URL을 어디에서 찾을 수 있는지 모르겠습니다.그래서 다음 사항을 추가했습니다.application.properties
파일:
flyway.url=jdbc:postgresql://localhost:5432/services?user=postgres&password=postgres
flyway.enabled=true
Spring Boot 시작 시(및 웹 응용 프로그램을 로드하여 사용 가능)에는 Flyway에서 로그가 없습니다.플라이웨이는 무시당한 것 같아.
내가 뭘 할 수 있을까?또는 일반적으로 이 문제를 직접 디버깅하려면 어떻게 해야 할까요?
아무도 답을 안 올렸으니 제가 알아낸 걸 올리겠습니다.
M. Deinum의 질문에 대한 코멘트는 정말 옳았습니다.문제는 데이터 소스의 부족이었습니다.
나의 원래 질문은 이런 종류의 문제를 디버깅하기 위한 접근법이 무엇이냐는 것이었다.stackoverflow에 투고하는 방법도 분명히1가지입니다만, 직접 방법을 알고 싶었습니다.
Spring Boot에는 코드와 클래스 경로를 확인하고 적절하게 동작하는 여러 클래스가 있습니다.예를 들어 "Flyway가 경로 상에 있고 데이터 소스가 있는 경우 Flyway를 실행합니다"와 같은 규칙에 대한 구현을 제공하는 클래스가 있습니다.제 경우엔 데이터 소스가 없었기 때문에 이 규칙이 트리거되지 않았습니다.
작성한 코드가 Spring Boot를 호출하는 것이 아니라 반대로 Spring Boot(코드 외부)가 코드를 검사하고 규칙에 따라 수행할 작업을 결정합니다.이 아키텍처는 원거리 액션으로 알려져 있습니다.원거리에서의 동작의 주된 문제는 디버깅이 매우 어렵다는 것입니다.
해결책을 찾을 수 있는 유일한 방법은 M을 확인하는 방법이었어.Deinum의 진단은 Spring Boot 소스 코드를 읽고 Spring Boot 코드를 만드는 데 사용되는 주석을 이해하는 것입니다.
소스 코드부터 Spring Boot의 Flyway 통합까지 볼 수 있습니다.
@ConditionalOnClass(Flyway.class)
@ConditionalOnBean(DataSource.class)
즉, "Flyway가 클래스 경로에 있고 DataSource bean을 사용할 수 있는 경우 이 코드가 실행됩니다. 그렇지 않으면 자동으로 실행되지 않습니다."
따라서 "이 문제를 디버깅하는 방법"이라는 질문에 대한 답은 Spring Boot의 소스 코드를 읽고 어떻게 동작하는지 확인하는 것 외에 다른 메커니즘이 없다는 것입니다.
이러한 문제를 회피하려면 '원거리에서의 액션'을 통해 동작하는 프레임워크를 피해야 합니다.이 프레임워크에는 스프링 부트가 포함됩니다.
언급URL : https://stackoverflow.com/questions/43496506/how-to-debug-when-flyway-doesnt-work-on-spring-boot
'programing' 카테고리의 다른 글
Oracle 스토어드 프로시저에서 "현황"과 "현황"의 차이점은 무엇입니까? (0) | 2023.03.19 |
---|---|
Spring MVC 애플리케이션에서 Swagger를 구현하는 '간단한' 방법 (0) | 2023.03.19 |
reactjs 컴포넌트에서 "key" 속성에 액세스하는 방법 (0) | 2023.03.19 |
Wordpress의 부하가 높을 때 MySQL이 정기적으로 행업합니다. (0) | 2023.03.19 |
PL/SQL에서 동적 SELECT INTO 절과 함께 바인드 변수 사용 (0) | 2023.03.19 |