[英]Spring Boot FlywayException: Unable to connect to the database. Configure the url, user and password
當我運行maven flyway:migrate
,出現錯誤
無法在項目 myProject 上執行目標 org.flywaydb:flyway-maven-plugin:6.5.5:migrate (default-cli): org.flywaydb.core.api.FlywayException: 無法連接到數據庫。 配置url,用戶和密碼!
我的 application.yml 文件中有我的 Spring Boot 設置,但我猜這個錯誤意味着它沒有檢測到數據庫配置。 該文檔說,“然后,Spring Boot 將使用其數據源自動裝配 Flyway,並在啟動時調用它。” 如果我將配置添加到我的 pom.xml 中的 flyway 插件部分,它會成功連接到數據庫,但我希望它使用我的 application.yml 配置。 不是 pom.xml。 那么我做錯了什么?
鏈接到有問題的回購: https : //github.com/jack-cole/BrokenSpringBoot
應用程序.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>
使用 Maven 運行:
無法在項目 myProject 上執行目標 org.flywaydb:flyway-maven-plugin:6.5.5:migrate (default-cli): org.flywaydb.core.api.FlywayException: 無法連接到數據庫。 配置url,用戶和密碼!
您可以在 flyway-maven-plugin 配置中配置url、用戶和密碼,參見First Steps Maven
<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 中的更多方法
使用 spring-boot 運行:
當您將 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
來運行應用程序
注意:還要檢查遷移腳本是否在db/migration
否則提供帶有spring.flyway.locations
屬性的位置
資源:
https://flywaydb.org/documentation/configuration/parameters/
https://flywaydb.org/documentation/getstarted/firststeps/maven/
您引用了 spring boot 文檔的一部分,但是您不是通過 spring boot 而是作為 maven 任務啟動了遷移。
Flyway maven 插件不知道 spring boot 配置,它只考慮以下來源:覆蓋順序
在我的 PC 上,我使用了環境變量方法 - 我為構建插件和 Spring Boot 定義了相同的環境變量。
如果您希望在啟動應用程序時執行 Flyway(使用 spring-boot),只需刪除flyway-maven-plugin
插件,您不需要它。
- 編輯
順便說一句,如果您運行maven flyway:migrate
,您確實需要在插件上設置憑據(它不訪問 java 資源)。
pom.xml
的插件中設置憑據。application.yaml
文件上設置憑據以啟動應用程序你有沒有嘗試過?
應用程序.yml
spring:
flyway:
driverClassName: org.postgresql.Driver
url: "jdbc:postgresql://localhost:5433/myDB"
user: postgres
password: test123
enabled: true
您的配置有一些錯過的時刻:
.yml
配置文件使用了太多空格。 每個下一層都應該包含 2 個以上的空格,例如:spring:
datasource:
url: jdbc:postgresql://localhost/myDB
username: postgres
password: root
不再。 否則,它不會工作!
如果您使用 IntelliJ Idea,您可以使用自動格式化快捷方式來格式化.yml
: Ctrl + Alt + L 。
或者您可以使用與.properties
相同的樣式:
spring.datasource.url: ...
spring.datasource.username: ...
比較多余。 但是,使其不正確的機會較少。
<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
默認情況下,在V1
-> V1__
之后正好有兩個下划線!
這里有更多信息:遷移信息。
spring.jpa.show-sql: true
spring.jpa.hibernate.ddl-auto: create
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.