Spring boot 当Flyway不运行时如何调试';弹簧靴不行吗?

Spring boot 当Flyway不运行时如何调试';弹簧靴不行吗?,spring-boot,flyway,Spring Boot,Flyway,我正在使用Maven和Spring Boot。我使用mvn-spring-boot:run运行应用程序 说应该在春季启动时调用Flyway 因此,我的pom.xml包含对Flyway的依赖 <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>4.1.2</versio

我正在使用Maven和Spring Boot。我使用
mvn-spring-boot:run
运行应用程序

说应该在春季启动时调用Flyway

因此,我的pom.xml包含对Flyway的依赖

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>4.1.2</version>
</dependency>
上面的文章暗示它应该“正常工作”,但我不明白它在哪里可以找到数据库的JDBCURL。因此,我在
application.properties
文件中添加了以下内容:

flyway.url=jdbc:postgresql://localhost:5432/services?user=postgres&password=postgres
flyway.enabled=true
当SpringBoot启动(加载并使我的web应用程序可用)时,Flyway没有日志。我认为Flyway被忽略了


我能做什么?或者,更一般地说,我将如何亲自调试这个问题?

没有人给出答案,所以我将发布我发现的结果

M.Deinum对这个问题的评论确实是正确的,问题是缺乏数据来源

我最初的问题是调试此类问题的方法应该是什么。显然,一个选择是发布到stackoverflow:),但我想知道如何自己做

SpringBoot有许多类,它们查看您的代码和类路径,并适当地执行操作。例如,有些类提供规则的实现,如“如果Flyway在路径上,并且有数据源,那么执行Flyway”。在我的案例中,这个规则没有被触发,因为我没有数据源

不是您编写的代码调用Spring Boot,而是相反,Spring Boot(代码外部)检查您的代码并根据规则决定要做什么。这种架构称为。远距离操作的主要问题是调试非常困难

找到解决方案的唯一真正方法,也是我确认M.Deinum诊断的方法,是阅读Spring引导源代码并理解用于创建Spring引导代码的注释

从源代码到我们所看到的

这意味着“如果Flyway在类路径上,并且如果有可用的数据源bean,那么将执行此代码;否则它将不会以静默方式执行”

因此,“如何调试这个问题”的答案是,除了阅读SpringBoot的源代码并了解其工作原理之外,没有其他机制


如果您想避免此类问题,必须避免通过“远距离操作”工作的框架,这包括Spring启动。

flyway默认情况下将使用
Spring指定的普通数据源。数据源
properties通常不需要额外的数据源。如果您确实想为flyway使用单独的URL和用户,则需要
flyway.URL
flyway.username
flyway.password
一起使用,并且不嵌入URL中。接下来,请确保您有一个数据库驱动程序,否则不会检测到JDBC,也不会运行任何东西(如果没有JDBC,它将无法工作)。谢谢您的建议。但是没有错误,应用程序“运行”(只是没有调用Flyway),我怀疑(希望?)如果数据源错误(例如没有JDBC驱动程序),那么它会打印错误,或者我的假设是错误的?如果您已经在使用数据源,那么默认情况下将使用该数据源。你还希望看到什么?日志记录取决于您的日志级别,如果日志级别很高(警告或其他),您将看不到任何东西。与其依赖日志记录,不如检查数据库的内容。我目前没有使用数据源(这是一个新项目)。根据“或者您可以通过在外部属性中设置Flyway。[url、用户、密码]来使用Flyway的本机数据源。”因此,设置Flyway.xx属性并运行Spring Boot应用程序不仅不会记录日志,也不会影响数据库。(如果我使用Maven的Flyway插件在构建过程中进行迁移,那么数据库将被迁移,因此我认为迁移文件位于正确的位置。但我希望在Spring Boot启动时进行迁移)正如我在第一条评论中所述,If仅在您已经使用数据源的情况下才起作用。如果你不是,它什么也做不了。flyway配置取决于数据源的可用性。如果这不可用,flyway将被禁用。不幸的是,“Spring Boot的flyway集成”链接已断开。我想我正面临着flyway在春天之前无法运行的问题。感谢StefanFalk的帮助。我现在已经改正了。
flyway.url=jdbc:postgresql://localhost:5432/services?user=postgres&password=postgres
flyway.enabled=true
@ConditionalOnClass(Flyway.class)
@ConditionalOnBean(DataSource.class)