在Micronaut中使用Gradle Flyway插件手动迁移遇错及数据源复用问题
解决方案
1. 修复数据库驱动缺失问题
报错No database found to handle jdbc:postgresql://localhost:5432/school_staff的核心原因是Flyway Gradle插件找不到PostgreSQL的JDBC驱动。需要在build.gradle中为Flyway添加驱动依赖:
plugins { id "io.micronaut.application" version "4.x.x" id "org.flywaydb.flyway" version "11.0.1" } dependencies { // 引入PostgreSQL驱动,版本可根据实际需求调整 flywayRuntimeOnly 'org.postgresql:postgresql:42.7.3' }
2. 复用application.properties中的数据源配置
通过Gradle读取src/main/resources/application.properties里的默认数据源配置,直接注入到Flyway插件中,避免重复配置:
flyway { // 加载application.properties配置文件 def appProps = new Properties() file("src/main/resources/application.properties").withInputStream { stream -> appProps.load(stream) } // 复用默认数据源的配置项 url = appProps.getProperty('datasources.default.url') user = appProps.getProperty('datasources.default.username') password = appProps.getProperty('datasources.default.password') // 迁移脚本默认路径为src/main/resources/db/migration,若路径不同可手动指定 // locations = ['filesystem:src/main/resources/custom-migration-path'] }
3. 确认自动迁移已禁用
确保application.properties中已关闭Micronaut启动时的自动Flyway迁移:
# 全局禁用Flyway自动迁移 flyway.enabled=false # 或仅针对默认数据源禁用 flyway.datasources.default.enabled=false
4. 执行迁移命令
配置完成后,重新运行迁移命令即可:
./gradlew flywayMigrate
额外提示
- 若使用
application.yml而非.properties,需添加SnakeYAML依赖并调整配置读取逻辑:dependencies { implementation 'org.yaml:snakeyaml:2.2' } flyway { def yaml = new org.yaml.snakeyaml.Yaml() def appProps = yaml.load(file("src/main/resources/application.yml").text) url = appProps.datasources.default.url user = appProps.datasources.default.username password = appProps.datasources.default.password } - 检查
application.properties中的数据源配置键名是否正确,确保没有拼写错误。
内容的提问来源于stack exchange,提问作者San Jaisy
相关产品推荐
相关产品推荐

