programing

스프링 부츠 플라이웨이예외:데이터베이스에 연결할 수 없습니다.URL, 사용자 및 암호 구성

minimums 2023. 7. 17. 20:49
반응형

스프링 부츠 플라이웨이예외:데이터베이스에 연결할 수 없습니다.URL, 사용자 및 암호 구성

실행할 때maven flyway:migrate나는 오류를 이해합니다.

프로젝트 myProject: org.flywaydb.core.api에서 목표 org.flywaydb:flyway-maven-plugin:6.5.5:migrate(default-cli)를 실행하지 못했습니다.Flyway 예외:데이터베이스에 연결할 수 없습니다.URL, 사용자 및 암호를 구성합니다!

application.yml 파일에 Spring Boot 설정이 있지만 오류가 발생하면 데이터베이스 구성이 감지되지 않는 것 같습니다.문서에는 "Spring Boot은 데이터 소스와 함께 Flyway를 자동으로 연결하고 시작할 때 호출합니다."라고 나와 있습니다.flyway plugin 섹션의 pom.xml에 구성을 추가하면 데이터베이스에 연결되지만 application.yml 구성을 사용합니다.pom.xml이 아닙니다.그럼 내가 뭘 잘못하고 있는 거지?

문제가 있는 repo 링크: https://github.com/jack-cole/BrokenSpringBoot

application.yml

spring:
    datasource:
        driverClassName: org.postgresql.Driver
        url: "jdbc:postgresql://localhost:5433/myDB"
        username: postgres
        password: test123

종속성:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jooq</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.16</version>
</dependency>
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>7.0.0</version>
</dependency>

플러그인:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>6.5.5</version>
</plugin>

메이븐으로 실행:

프로젝트 myProject: org.flywaydb.core.api에서 목표 org.flywaydb:flyway-maven-plugin:6.5.5:migrate(default-cli)를 실행하지 못했습니다.Flyway 예외:데이터베이스에 연결할 수 없습니다.URL, 사용자 및 암호를 구성합니다!

flyway-maven-plugin 구성에서 url, 사용자암호를 구성할 수 있습니다. 첫 번째 단계 메이븐 참조

<plugin>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
    <version>7.0.0</version>
    <configuration>
        <url>jdbc:postgresql://localhost:5433/myDB</url>
        <user>postgres</user>
        <password>test123</password>
    </configuration>
</plugin>

또는 환경 변수 포함:

mvn flyway:migrate -Dflyway.url=jdbc:postgresql://localhost:5433/myDB -Dflyway.user=postgres -Dflyway.password=test123

많은 접근법은 https://www.baeldung.com/database-migrations-with-flyway 에서 확인

스프링 부트로 실행:

프로젝트에 Flyway 코어 라이브러리를 포함할 때 응용 프로그램 시작 시 Spring Boot 자동 구성 및 Flyway 트리거.의 사용 보기@ConditionalOnClass(Flyway.class)플라이웨이에서자동 구성:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Flyway.class)
@Conditional(FlywayDataSourceCondition.class)
@ConditionalOnProperty(prefix = "spring.flyway", name = "enabled", matchIfMissing = true)
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, JdbcTemplateAutoConfiguration.class,
      HibernateJpaAutoConfiguration.class })
@Import({ FlywayEntityManagerFactoryDependsOnPostProcessor.class, FlywayJdbcOperationsDependsOnPostProcessor.class,
      FlywayNamedParameterJdbcOperationsDependencyConfiguration.class })
public class FlywayAutoConfiguration {
    ...
}

사용하다mvn spring-boot:run또는java -jar app.jar응용 프로그램을 실행합니다.

NB: 마이그레이션 스크립트가 다음 위치에 있는지도 확인합니다.db/migration그렇지 않으면 위치를 제공합니다.spring.flyway.locations소유물

리소스:

https://flywaydb.org/documentation/configuration/parameters/

https://flywaydb.org/documentation/getstarted/firststeps/maven/

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-execute-flyway-database-migrations-on-startup

스프링 부트 문서의 일부를 인용했지만, 스프링 부트가 아닌 메이븐 작업으로 마이그레이션을 시작했습니다.

Flyway maven 플러그인은 스프링 부트 구성을 인식하지 않으며 다음 소스만 고려합니다.우선순위

  1. 시스템 속성
  2. 환경변수
  3. 사용자 정의 구성 파일
  4. 메이븐 특성
  5. 플러그인 구성 섹션
  6. settings.xml의 자격 증명
  7. /flyway.conf
  8. Flyway Maven 플러그인 기본값

PC에서 환경 변수 접근 방식을 사용했습니다. 빌드 플러그인과 스프링 부트에 대해 정의된 것과 동일한 환경 변수가 있습니다.

앱을 시작할 때 Flyway를 실행하려면(스프링 부트 포함), 다음을 제거합니다.flyway-maven-plugin플러그인, 필요 없습니다.

편집

그나저나, 네가 뛰면,maven flyway:migrate플러그인에 대한 자격 증명을 설정해야 합니다(Java 리소스에 액세스하지 않음).

  • 이 => 에서 자격 . 따 서 이 작 실 하 거 에 날 증 을 자 에 야 해 정 명 다 합 니 설 격 짜 플 그 라pom.xml.
  • 플러그인이에 자격 증명을 하면 됩니다.application.yaml을 위한 입니다.

시도해 보셨습니까?

application.yml

spring:
    flyway:
        driverClassName: org.postgresql.Driver
        url: "jdbc:postgresql://localhost:5433/myDB"
        user: postgres
        password: test123
        enabled: true

구성에 몇 가지 누락된 부분이 있습니다.

  • 스프링 부트를 위해 너무 많은 공간을 사용합니다..yml 에는 다음과 이 더 합니다모든 다음 수준에는 다음과 같은 두 개의 공백이 더 있어야 합니다.
spring:
  datasource:
    url: jdbc:postgresql://localhost/myDB
    username: postgres
    password: root

이제 그만.그렇지 않으면, 그것은 작동하지 않을 것입니다!

Idea를 한다면 자동 를 사용하여 IntelliJ Idea를 할 수 ..yml: Ctrl + Alt + L.

또는 다음과 같은 스타일을 사용할 수 있습니다..properties:

spring.datasource.url: ...
spring.datasource.username: ...

중복성이 높아집니다.그러나 오류를 범할 가능성은 줄어듭니다.

  • Spring Boot을 사용하고 있습니다.따라서 버전을 직접 포함할 필요가 없습니다.
    Spring의 의존성 관리에 훨씬 더 나은 것이 남겨질 것입니다.
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

그리고.

<plugin>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-maven-plugin</artifactId>
</plugin>

대부분의 경우 이러한 버전 조합이 잘 작동할 것이라고 확신할 수 있습니다.

  • 당신은 당신의 마이그레이션 파일을 아래에 놓아야 합니다.resources/db/migration또한 이름을 짓는 것은 매우 중요합니다. 번째 은 다음과 같은.

V1__Init_Db.sql

으로 적으로다음정확두히개의밑표다시니됩줄이에기뒤본▁▁by▁after 뒤에 정확히 두 개의 밑줄이 있습니다.V1->V1__!

자세한 내용은 마이그레이션 정보를 참조하십시오.

  • 또한 구성 파일에 다음과 같은 추가 값이 필요한지 확인합니다.
spring.jpa.show-sql: true
spring.jpa.hibernate.ddl-auto: create

언급URL : https://stackoverflow.com/questions/64191935/spring-boot-flywayexception-unable-to-connect-to-the-database-configure-the-ur

반응형