Flyway: 스키마 기록 테이블이 없는 "공개" 스키마를 찾았습니다!baseline() 사용 - 빈 데이터베이스에서
kotlin Spring 부트, jpa 및 postgre를 사용하여 플라이웨이를 설정하려고 합니다.SQL. 나의 그래들 의존관계는 다음과 같습니다.
dependencies {
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
implementation('org.flywaydb:flyway-core')
implementation('com.google.code.gson:gson')
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-reflect")
runtimeOnly('org.postgresql:postgresql')
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
application.properties 파일은 다음과 같습니다.
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://${JDBC_DATABASE_URL}/jpaTestDatabase
spring.datasource.username=${JDBC_DATABASE_USERNAME}
spring.datasource.password=${JDBC_DATABASE_PASSWORD}
flyway.baseline-on-migrate=true
flyway.locations=classpath:src/main/kotlin/db/migration
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=validate
spring.session.store-type=none
jpa 와 휴지 상태를 사용하여 테이블과 엔트리를 작성하는 것은 예상대로 동작합니다.그러나 빈 데이터베이스로의 이행 예는 다음과 같습니다.
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]:
Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException:
Found non-empty schema(s) "public" without schema history table! Use baseline() or set baselineOnMigrate to true to initialize the schema history table.
디렉토리 구조는 spring initializer에 의해 생성된 기본 구조이며 이행은 다음과 같습니다.demo/src/main/kotlin/db/migration
이행은 1개뿐입니다.이 예에서는 다음과 같이 수정한 이행 예시를 코틀린화한 버전입니다.
class V1__Sample : BaseJavaMigration() {
override fun migrate(context: Context?) {
val statement = context?.connection?.prepareStatement(
"""
CREATE TABLE article (
id bigserial primary key,
name varchar(20) NOT NULL,
desc text NOT NULL
);
"""
)
statement.use { it?.execute() }
}
}
내가 뭘 놓쳤지?데이터베이스가 완전히 비어 있는데(깨끗한 도커 이미지) 스키마 기록 테이블 없이 비어 있지 않은 스키마를 찾는 것에 대해 Flyway가 계속 불평하는 이유는 무엇입니까?
spring-boot 버전2 를 사용하고 있는 것을 전제로 합니다.
스프링 부트 2에서는 프리픽스는 "spring"입니다.flyway"라고 하는 프레픽스를 추가해 보겠습니다.spring
아래와 같이.
spring.flyway.baseline-on-migrate = true
또는
spring.flyway.baselineOnMigrate = true
시도해 볼 수 있을 것이다 mvn flyway:clean && mvn flyway:migrate
데이터베이스의 검색 경로를 확인하십시오. (플라이웨이가 로그 테이블을 만들고 있는) 공용 스키마가 처음부터 없으면 로그 테이블을 찾을 수 없고 스키마 기록을 찾을 수 없다는 불만이 제기될 수 있습니다.
베이스라인을 설정할 경우 스크립트 폴더에서 오래된 스크립트를 삭제해야 합니다.삭제하지 않으면 다시 시도됩니다.
언급URL : https://stackoverflow.com/questions/53172123/flyway-found-non-empty-schemas-public-without-schema-history-table-use-bas
'source' 카테고리의 다른 글
woocommerce 테마에서 제품 페이지를 수정할 위치 (0) | 2023.02.10 |
---|---|
Wordpress 블로그에서 페이지가 localhost로 리디렉션되는 이유는 무엇입니까? (0) | 2023.02.10 |
Spring JDBC에서 현재 Connection 개체를 가져오는 방법 (0) | 2023.02.10 |
시도된 가져오기 오류: 'useHistory'가 'react-router-dom'에서 내보내지지 않았습니다. (0) | 2023.02.10 |
logback.xml 응용 프로그램 속성 액세스 (0) | 2023.02.10 |