Spring Boot Actuator FlywayEndpoint 不适用于多个 Flyway bean

Spring Boot Actuator FlywayEndpoint doesn't work with multiple Flyway beans

我正在尝试将我目前正在处理的项目从 Spring Boot 1.2.8 升级到最新版本 (1.4.0)。我发现,自版本 1.3.0 以来 Spring Boot Actuator 将 Flyway 迁移公开为 Actuator 端点。此端点将单个 Flyway bean 作为参数。

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointAutoConfiguration.java#L187

我的项目使用多个 Flyway bean 来管理多个数据库的迁移,当我尝试启动应用程序时,Spring 抱怨 NoUniqueBeanDefinitionException。

当我禁用 EndpointAutoconfiguration 时,上下文被正确创建。我此时不一定需要 Flyway 端点,但我们确实使用其他端点进行监控,因此我不想禁用所有端点。我尝试使用

在 application.properties 文件中禁用 flyway 端点
endpoints.flyway.enabled=false

但 Spring 仍然抱怨(我认为它无论如何都会尝试创建端点 bean,并且 'enabled' 属性 用于确定端点在运行时的可用性)。

我认为目前我唯一的选择是手动启用我需要的端点并禁用自动配置。是吗?

此外,为什么 FlywayEndpoint 仅适用于存在的单个 Flyway bean,是否有原因?据我了解,构造函数可以只获取 Flyway bean 的列表,然后 invoke() 方法可以迭代它们。

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/FlywayEndpoint.java#L54

I think currently my only option is to manually enable the endpoints that I need and disable autoconfiguration. Is that right?

是的,我认为是正确的。您看到的行为是一个错误,所以我打开了 an issue。我们会在 1.4.1 中修复它,也许在 1.3.8 中也会修复它。

And also, is there a reason, why the FlywayEndpoint only works with a single Flyway bean present?

没有其他原因,我们没有考虑您的用例。我已经为端点打开 an enhancement 以支持多个 Flyway bean(Liquibase 也一样)。