【发布时间】:2017-09-15 17:29:48
【问题描述】:
我正在使用 Maven 和 Spring Boot。我使用mvn spring-boot:run 运行应用程序。
https://flywaydb.org/documentation/plugins/springboot 表示应在 Spring Boot 启动时调用 Flyway。
所以我的 pom.xml 包含对 Flyway 的依赖。
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.1.2</version>
</dependency>
我第一次运行上面的 Maven 命令时,它下载了 Flyway 的东西,所以我认为依赖项正在工作。
我有以下文件:
./src/main/resources/db/migration/V123__foo.sql
./src/main/resources/application.properties
上面的文章暗示它应该“正常工作”,但我不明白它会在哪里找到数据库的 JDBC URL。所以我在application.properties 文件中添加了以下内容:
flyway.url=jdbc:postgresql://localhost:5432/services?user=postgres&password=postgres
flyway.enabled=true
当 Spring Boot 启动(并加载并启用我的 Web 应用程序)时,Flyway 没有日志。我认为 Flyway 被忽略了。
我能做什么?或者,更一般地说,我将如何自己调试这个问题?
【问题讨论】:
-
flyway 默认使用
spring.datasource属性指定的普通数据源,一般不需要额外的。如果你真的想为 flyway 使用单独的 URL 和用户,你需要flyway.url和flyway.username和flyway.password,而不是嵌入在 URL 中。旁边确保你有一个数据库驱动程序,否则没有检测到 JDBC 并且不会运行任何东西(没有 JDBC 它不会工作)。 -
感谢您的建议。虽然没有错误,应用程序“运行”(只是没有调用 Flyway),我怀疑(希望?)如果数据源错误(例如没有 JDBC 驱动程序),那么它会打印一个错误,或者我错了那个假设?
-
如果您已经在使用数据源,那么默认情况下将使用该数据源。你还期待看到什么?日志记录取决于您的日志级别,如果它很高(WARN 或其他东西),您将看不到任何东西。您可能希望检查数据库的内容,而不是依赖日志记录。
-
我目前没有使用数据源(这是一个新项目)。根据docs.spring.io/spring-boot/docs/current/reference/html/…“或者你可以通过在外部属性中设置flyway.[url,user,password]来使用Flyway的原生DataSource。”所以设置 flyway.xx 属性并运行 Spring Boot 应用程序不仅不会记录,也不会影响数据库。 (如果我使用 Maven 的 Flyway 插件,在构建期间进行迁移,那么数据库会被迁移,所以我认为迁移文件是正确的位置。但我想在 Spring Boot 启动时)
-
正如我在第一条评论中所说,如果您已经在使用数据源,那么 if 只会起作用。如果你不是,它什么也做不了。 flyway 配置取决于数据源的可用性。如果这不可用,flyway 将被禁用。
标签: spring-boot flyway