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 并传递特定的代理模板。
我的团队正在使用 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 并传递特定的代理模板。