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

时间:2016-08-10 14:36:12

标签: java spring-boot spring-boot-actuator

我正在尝试将我目前正在使用的项目从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端点
{path: 'home', component: HomeComponent, canActivate: [AuthenticationService], children: [
    {path: '', redirectTo: 'first-component', 
    {path: 'first-component', component: FirstComponent},
    {path: 'second-component', component: SecondComponent}
]},

但是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

1 个答案:

答案 0 :(得分:3)

  

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

是的,我认为是对的。您所看到的行为是一个错误,因此我已经打开了an issue。我们将其修复为1.4.1,也可能是1.3.8。

  

而且,还有一个原因,为什么FlywayEndpoint仅适用于存在的单个Flyway豆?

除了我们没有考虑过您的用例之外没有任何理由。我已经为端点打开an enhancement以支持多个Flyway bean(对于Liquibase也是如此)。