【问题标题】:Multiple RestTemplateBuilders in Context forms cycle上下文表单循环中的多个 RestTemplateBuilders
【发布时间】:2019-06-03 20:46:54
【问题描述】:

我的应用程序对 2 个不同的 Web 服务进行 REST 调用。第一个使用基本身份验证,第二个不使用。我想定义一个配置了基本身份验证凭据的 RestTemplateBuilder bean,并将其用于基本身份验证情况,并将默认 Spring 配置的 RestTemplateBuilder 用于非基本身份验证情况。

但定义自定义 RestTemplateBuilder bean 时上下文加载失败(详情如下)。

豆定义:

@Configuration
class RestTemplateBuilderConfig {

    @Bean
    public RestTemplateBuilder customRestTemplateBuilder(RestTemplateBuilder springConfiguredRestTemplateBuilder) {
        return
            springConfiguredRestTemplateBuilder
                .basicAuthentication("user", "password");
    }
}

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

上下文加载失败:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐
|  customRestTemplateBuilder defined in class path resource [com/example/demo/RestTemplateBuilderConfig.class]
└─────┘

据我了解,spring 初始化的 bean 应该被注入到customRestTemplateBuilder(...) 并且返回值应该产生一个名为 customRestTemplateBuilder 的新 bean。感谢任何关于可能出现问题的指示?

this question 的答案建议定义 RestTemplate bean。但这会阻止在我的测试中使用RestClientTest

我可以将 Spring 初始化的 RestTemplateBuilder 注入到我的服务中,并在每个服务中的 restTemplateBuilder.build() 之前设置凭据。但是设置凭据的逻辑将分布在服务之间(违反 DRY)。

定义一个新的 RestTemplateBuilder 解决了这个问题,但是 Spring 初始化丢失了。

@Bean
    public RestTemplateBuilder customRestTemplateBuilder() {
        return
            new RestTemplateBuilder()
                .basicAuthentication("user", "password");
    }

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    您别无选择,只能在您的上下文中定义 2 个 bean,它们可能通过为两者定义一个 init 方法来共享相同的初始化逻辑。正如您的示例中所示,由于 bean 级别的重用是不可能的。

    【讨论】:

      【解决方案2】:

      RestTemplateBuilder 用于构建单个 RestTemplates。

      最简单的方法是只构建两个 restTemplate 并为每个 RestTemplate 使用一个 @Qualifier。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-13
        • 2023-03-04
        • 2018-08-08
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        相关资源
        最近更新 更多