You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>

另外顺便检查两个点:

  1. 迁移脚本路径src/main/resources/db/migration/portfolio是否真实存在
  2. 脚本命名是否符合你设置的分隔符规范(比如V1__Initial_Create.sql,因为你用了__作为分隔符)

改完之后重新执行mvn flyway:migrate应该就能正常运行了。

内容的提问来源于stack exchange,提问作者BernardA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:47:12