Spring-MVC 3.0を使用して実装された開発ボックスでWebサービスを実行しています。 RestTemplateを使用してそのサービスに対してテストするさまざまなJUnitがあります。私がやりたいのは、JMeterにJUnitを実行させたときにそれらのJUnits REST=リクエストをピックアップするようにすることです。しかし、それを行うには、SpringのRestTemplateが私がいるプロキシにそれらを送信する必要がありますJMeterを実行しています。質問は、どのようにすればよいですか?
私はCXFとそのhttp:conduitおよびhttp:clientで同様のことを行いましたが、Spring-MVCでこれを行う方法はまったくわかりません。
@AHungerArtistの答えは、すべてのリクエストで同じプロキシを使用する単純なユースケースに有効です。ただし、restTemplateを介してプロキシを使用するリクエストと、使用しないリクエストが必要な場合は、これがより便利な場合があります。 (または、システムプロパティをいじるのが好きなだけでなく、プログラムで行うのが好きな場合!)
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("my.Host.com", 8080));
requestFactory.setProxy(proxy);
return new RestTemplate(requestFactory);
}
RestTemplate Beanのコピーをそのように作成し、別のコピーを通常の方法で作成できるようにする必要があります。これにより、プロキシを使用して、または使用せずにリクエストを送信できます。
悲しいことに、これは本当に簡単でした。
Properties props = System.getProperties();
props.put("http.proxyHost", "localhost");
props.put("http.proxyPort", "9080");
Springには優れた機能があります カスタマイザーを使用して異なるプロキシを決定するドキュメント
public class ProxyCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
final String proxyUrl = "proxy.example.com";
final int port = 3128;
HttpHost proxy = new HttpHost(proxyUrl, port);
HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
@Override
protected HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context)
throws HttpException {
if (target.getHostName().equals("gturnquist-quoters.cfapps.io")) {
return super.determineProxy(target, request, context);
}
return null;
}
}).build();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
}
proxyCustomizerを適用する呼び出しは
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.additionalCustomizers(new ProxyCustomizer()).build();
}
または、ランタイムパラメータを使用できます。
jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
getまたはpostメソッドを呼び出す前にこれらの行を入れてください。プロキシが設定されます。
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
DefaultHttpClient httpClient = (DefaultHttpClient) requestFactory.getHttpClient();
HttpHost proxy = new HttpHost("proxtserver", port);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
restTemplate.setRequestFactory(requestFactory);