![](/img/trans.png)
[英]Spring Boot Actuator FlywayEndpoint doesn't work with multiple Flyway beans
[英]Spring Actuator: Error configuring CloudFoundryActuator with multiple custom RestTemplateBuilder beans
我们在 java @Configuration 注释类中配置两个单独的 RestTemplateBuilder bean,如下所示:
@Bean("internal_api")
public RestTemplateBuilder internalRestTemplateBuilder(@Autowired
OAuthConsumerOperations oAuthConsumerOperations) {
...
}
@Bean("external_api")
public RestTemplateBuilder externalRestTemplateBuilder(){
...
}
当我们将应用程序部署到 Pivotal Cloud Foundry Apps Manager 时,我们收到以下错误。 它抱怨当它只期待一个时发现了不止一个 RestTemplateBuilder bean。
2018-08-28T11:59:17.67-0400 [APP/PROC/WEB/0] OUT {"timeMillis":1535471957677,"thread":"main","level":"WARN","loggerName":"org .springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext","message":"在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“documentationPluginsBootstrapper”的 bean 时出错 [jar :file:/home/vcap/app/BOOT-INF/lib/springfox-spring-web-2.7.0.jar!/springfox/documentation/spring/web/plugins/DocumentationPluginsBootstrapper.class]:通过构造函数参数表达的不满足依赖1; 嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: Error create bean with name 'webMvcRequestHandlerProvider' 在 URL [jar:file:/home/vcap/app/BOOT-INF/lib/springfox-spring-web- 中定义2.7.0.jar!/springfox/documentation/spring/web/plugins/WebMvcRequestHandlerProvider.class]:不满意依赖 ency 通过构造函数参数 0 表示; 嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:在类路径资源 [org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfiguration.class] 中定义的名称为“cloudFoundryEndpointHandlerMapping”的 bean 创建时出错:通过方法“cloudFoundryEndpointHandlerMapping”表达的不满意的依赖参数 1; 嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException: 没有可用的 'org.springframework.boot.web.client.RestTemplateBuilder' 类型的合格 bean:预期的单个匹配 bean,但发现 2: internal_api,external_api","endOfBatch": false,"loggerFqcn":"org.apache.commons.logging.impl.SLF4JLocationAwareLog","contextMap":{},"threadId":1,"threadPriority":5}
这是一个错误吗? 在 Cloud Foundry 上使用 spring 执行器时,不是都允许配置多个 RestTemplateBuilder bean 吗? 有没有办法解决这个错误? 如果没有,创建 RestTemplate bean 而不是 RestTemplateBuilders 会起作用吗? 如果是这种情况,那么 CloudFoundryActuatorAutoConfiguration 类在 Cloud Foundry 上部署时是否需要至少定义一个 RestTemplateBuilder bean?
我的 0.02 美元,但我认为您不应该创建 RestTemplateBuilder 实例。 RestTemplateBuilder 的文档说:
在典型的自动配置 Spring Boot 应用程序中,此构建器可用作 bean,并且可以在需要 RestTemplate 时注入。
最好是您的应用程序可以是“典型的”,除非有充分的理由,否则我不会偏离这一点。 所以我认为你想做这样的事情:
// this is created & injected by Spring Boot
@Autowired
private RestTemplateBuilder restTemplateBuilder;
@Bean("internal_api")
public RestTemplate internalRestTemplate(@Autowired OAuthConsumerOperations oAuthConsumerOperations) {
return restTemplateBuilder.build(); // add additional config
}
@Bean("external_api")
public RestTemplate externalRestTemplate(){
return restTemplateBuilder.build(); // add additional config
}
具体解决您的问题:
这是一个错误吗? 在 Cloud Foundry 上使用 spring 执行器时,不是都允许配置多个 RestTemplateBuilder bean 吗? 有没有办法解决这个错误?
我不能明确地说,但似乎 Actuator 有一个前提条件,即期望只有一个存在。 是否应该/可以支持多个案例? 也许吧,但目前似乎没有这样做。
如果没有,创建 RestTemplate bean 而不是 RestTemplateBuilders 会起作用吗?
我相信这是要走的路,见上文。
如果是这种情况,那么 CloudFoundryActuatorAutoConfiguration 类在 Cloud Foundry 上部署时是否需要至少定义一个 RestTemplateBuilder bean?
不,看起来 Spring Boot 会为您定义一个。 虽然,如果您需要,您可以覆盖并创建自己的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.