Adr*_*ith 19 flyway spring-boot
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
我第一次运行Maven命令时它下载了Flyway的东西,所以我认为依赖是有效的.
我有以下文件:
./src/main/resources/db/migration/V123__foo.sql
./src/main/resources/application.properties
Run Code Online (Sandbox Code Playgroud)
上面的文章暗示它应该"正常工作",但我不明白它会在哪里找到数据库的JDBC URL.所以我在application.properties文件中添加了以下内容:
flyway.url=jdbc:postgresql://localhost:5432/services?user=postgres&password=postgres
flyway.enabled=true
Run Code Online (Sandbox Code Playgroud)
当Spring Boot启动(并加载并使我的Web应用程序可用)时,Flyway没有日志.我认为Flyway被忽略了.
我能做什么?或者,更一般地说,我将如何自己调试此问题?
Adr*_*ith 22
没有人发布答案,所以我会发布我发现的内容.
M. Deinum在对这个问题的评论中确实是正确的,问题是缺乏数据来源.
我最初的问题是调试此类问题的方法应该是什么.显然有一个选择是发布到stackoverflow :)但我想知道如何自己做.
Spring Boot有许多类,它们会查看您的代码和类路径,并采取适当的行动.例如,有些类为规则提供实现,例如"如果Flyway在路径上,并且有数据源,则执行Flyway".在我的情况下,该规则没有被触发,因为我没有数据源.
不是你编写的代码称为Spring Boot的情况,反之亦然,Spring Boot(代码外部)会检查你的代码并根据规则决定做什么.这种架构被称为远距离行动.远距离操作的主要问题是调试非常困难.
找到解决方案的唯一真正方法,就是我确认M. Deinum的诊断方法,就是阅读Spring Boot源代码并理解用于创建Spring Boot代码的注释.
从源代码到Spring Boot的Flyway集成,我们看到了
@ConditionalOnClass(Flyway.class)
@ConditionalOnBean(DataSource.class)
Run Code Online (Sandbox Code Playgroud)
这意味着"如果Flyway在类路径上,并且如果有可用的DataSource bean,则会执行此代码;否则它将无法执行".
因此,"如何调试此问题"这一问题的答案是,除了读取Spring Boot的源代码并了解它是如何工作之外,没有其他机制.
如果你想避免这种问题,你必须避免通过"远程操作"工作的框架,包括Spring Boot.
| 归档时间: |
|
| 查看次数: |
6902 次 |
| 最近记录: |