Spring 仅少数 类 启动 Rest 模板代理

Spring Boot Rest Template Proxy In Only Few Classes

我的团队正在使用 RestTemplate 进行外部 API 调用。我们需要将 RestTemplate 配置为仅在 certain classes 中使用代理。在所有其他 classes 中,我们希望避免使用代理。我的第一个想法是在不需要代理的地方继续@Autowire RestTemplate,并在需要代理的所有 classes 中执行以下操作。我对这个解决方案不满意,因为它看起来很容易 @Autowire RestTemplate 很干净,但必须在需要的每个 class 中键入以下代理配置的 RestTemplate。有没有更清洁的替代品?

需要代理

        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("http.proxy.fmr.com", 8000)));
        this.pricingRestTemplate = new RestTemplate(requestFactory);

***解决方案***
为 rest 模板创建了 2 个 beans 并将其中一个声明为主要 bean(需要避免错误)

配置中的新 bean class

    @Bean
    @Primary
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean(name = "proxyRestTemplate")
    public RestTemplate proxyRestTemplate() {
    SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("http.proxy.com", 8000));
    requestFactory.setProxy(proxy);
    return new RestTemplate(requestFactory);
}

然后我在需要使用代理的地方自动装配并使用了@Qualifier 注释

    // no proxy
    @Autowired
    RestTemplate oauth2RestTemplate;

    // yes proxy
    @Autowired
    @Qualifier("proxyRestTemplate")
    RestTemplate proxyRestTemplate;

在 class 的构造函数中注入 RestTemplate(或更好,RestOperations)(无论如何这是最佳实践),对于 classes您需要代理配置,使用 @Bean 配置方法来实例化 bean 并传递特定的代理模板。