SpringBoot集成Flyway迁移PostgreSQL时遇No database found错误求助
问题
我是Java新手,正在搭建首个API。我的SpringBoot应用能正常连接Docker容器里的PostgreSQL数据库(通过application.properties配置),但执行mvn flyway:migrate做Flyway迁移时,报错:No database found to handle jdbc:postgresql://localhost:5433/portfolio。
相关配置文件如下:
application.properties
spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:5433/portfolio spring.datasource.username=postgres spring.datasource.password=123456 spring.datasource.driverClassName=org.postgresql.Driver spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.hibernate.ddl-auto=none
Flyway的pom.xml配置
<plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>10.7.1</version> <configuration> <sqlMigrationSeparator>__</sqlMigrationSeparator> <locations> <location>filesystem:src/main/resources/db/migration/portfolio</location> </locations> <url>jdbc:postgresql://localhost:5433/portfolio</url> <user>postgres</user> <password>123456</password> </configuration> <dependencies> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>10.7.1</version> </dependency> </dependencies> </plugin>
docker-compose.yml
version: "3.8" volumes: db: services: postgresdb: container_name: postgres_container image: postgres restart: unless-stopped env_file: ./.env environment: - POSTGRES_USER=$POSTGRESDB_USER - POSTGRES_PASSWORD=$POSTGRESDB_ROOT_PASSWORD - POSTGRES_DB=$POSTGRESDB_DATABASE ports: - $POSTGRESDB_LOCAL_PORT:$POSTGRESDB_DOCKER_PORT volumes: - db:/var/lib/postgres pgadmin: image: dpage/pgadmin4:latest environment: PGADMIN_DEFAULT_EMAIL: admin@localhost.com PGADMIN_DEFAULT_PASSWORD: admin PGADMIN_LISTEN_PORT: 5050 ports: - '5050:5050'
.env
POSTGRESDB_USER=postgres POSTGRESDB_ROOT_PASSWORD=123456 POSTGRESDB_DATABASE=portfolio POSTGRESDB_LOCAL_PORT=5433 POSTGRESDB_DOCKER_PORT=5432
解决方案
这个错误的核心原因是Flyway Maven插件没加载PostgreSQL驱动,导致它识别不了PostgreSQL的JDBC URL。
直接修改pom.xml里的Flyway插件配置,在它的<dependencies>节点下添加PostgreSQL驱动依赖就行,版本可以和你Spring Boot项目里用的保持一致,或者选兼容的版本(比如42.6.0):
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.6.0</version> </dependency>
调整后的完整Flyway插件配置:
<plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>10.7.1</version> <configuration> <sqlMigrationSeparator>__</sqlMigrationSeparator> <locations> <location>filesystem:src/main/resources/db/migration/portfolio</location> </locations> <url>jdbc:postgresql://localhost:5433/portfolio</url> <user>postgres</user> <password>123456</password> </configuration> <dependencies> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>10.7.1</version> </dependency> <!-- 新增PostgreSQL驱动依赖 --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.6.0</version> </dependency> </dependencies> </plugin>
另外顺便检查两个点:
- 迁移脚本路径
src/main/resources/db/migration/portfolio是否真实存在 - 脚本命名是否符合你设置的分隔符规范(比如
V1__Initial_Create.sql,因为你用了__作为分隔符)
改完之后重新执行mvn flyway:migrate应该就能正常运行了。
内容的提问来源于stack exchange,提问作者BernardA
相关产品推荐
相关产品推荐

