Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Actuator:使用多个自定义RestTemplateBuilder bean配置CloudFoundryActuator时出错_Java_Spring_Spring Boot_Cloud Foundry_Spring Boot Actuator - Fatal编程技术网

Java Spring Actuator:使用多个自定义RestTemplateBuilder bean配置CloudFoundryActuator时出错

Java Spring Actuator:使用多个自定义RestTemplateBuilder bean配置CloudFoundryActuator时出错,java,spring,spring-boot,cloud-foundry,spring-boot-actuator,Java,Spring,Spring Boot,Cloud Foundry,Spring Boot Actuator,我们在java@Configuration注释类中配置两个单独的RestTemplateBuilder bean,如下所示: @Bean("internal_api") public RestTemplateBuilder internalRestTemplateBuilder(@Autowired OAuthConsumerOperations oAuthConsumerOperations) { ... } @Bean("external_api") public RestTem

我们在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时,发现了多个RestTemplateBuilder bean

2018-08-28211:59:17.67-0400[APP/PROC/WEB/0]OUT{“timeMillis”:1535471957677,“线程”:“主”、“级别”:“警告”、“日志名”:“org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext”、“消息”:“上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatifiededependencyException:创建URL中定义了名为'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.unsatifiedependencyException:创建URL中定义的名为“webMvcRequestHandlerProvider”的bean时出错[jar:file:/home/vcap/app/BOOT-INF/lib/springfox-spring-web-2.7.0.jar!/springfox/documentation/spring/web/plugins/WebMvcRequestHandlerProvider.class]:通过构造函数参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifiedPendencyException:创建名为“cloudFoundryEndpointHandlerMapping”的bean时出错,该bean在类路径资源[org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfiguration.class]中定义:通过方法“cloudFoundryEndpointHandlerMapping”参数1表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.NoniqueBeandDefinitionException:没有类型为“org.springframework.boot.web.client.RestTemplateBuilder”的合格bean可用:需要单个匹配bean,但找到2:内部\ api,外部\ api,“endOfBatch”:false,“loggerFqcn”:“org.apache.commons.logging.impl.SLF4JLocationAwareLog”,“contextMap”:{},“threadId”:1,“threadPriority”:5}


这是一个错误吗?当在Cloud Foundry上使用spring actuator时,你们不都被允许配置多个RestTemplateBuilder bean吗?有没有办法解决这个错误?如果没有,创建RestTemplate bean而不是RestTemplateBuilder会起作用吗?如果是这样,CloudFoundryActuatorAutoConfiguration类是否至少需要在Cloud Foundry上部署时要定义一个RestTemplateBuilder bean?

我的$0.02,但我认为您不应该创建RestTemplateBuilder实例。RestTemplateBuilder的文档说:

在一个典型的自动配置的Spring引导应用程序中,这个构建器可以作为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
}
具体解决您的问题:

这是一个bug吗?在Cloud Foundry上使用spring actuator时,是否不允许所有人配置多个RestTemplateBuilder bean?是否有办法避免此错误

我不能明确地说,但执行器似乎有一个前提条件,即只存在一个。它是否应该/能够支持多个案例?可能,但目前似乎没有这样做

如果不是,那么创建RESTTemplateBean而不是RestTemplateBuilders会起作用吗

我相信这是一条路要走,见上文

如果是这样,那么CloudFoundryActuatorAutoConfiguration类在部署到CloudFoundry上时是否需要至少定义一个RestTemplateBuilder bean


不,看起来Spring Boot会为您定义一个。不过,如果需要,您可以覆盖并创建自己的。

回答得很好。澄清了Spring公开了一个标准的RestTemplateBuilder bean。与其公开和注入您自己定制的RestTemplateBuilder bean,不如公开并注入从customi构建的RestTemplate bean标准RESTTemplateBuilderbean的组合。每个定制的RESTTemplatebean可以由多个rest客户端使用。