マロニー:
私はすべてが「共通の」ライブラリを使用する必要が3マイクロサービスを持っています。私は、共通のライブラリに新しいSpring構成を追加する必要があります。問題はMicroservice Aは、新しいコードを気にせず、実行するアプリケーションを取得するために設定を追加することを余儀なくされたくないということです。私はプログラムでのみMicroservice BとCのための設定をロードする方法が必要です
共通ライブラリの新設定:
@Configuration
public class HttpConnectionConfiguration {
@Value("${http.connect.timeout}")
private int httpConnectTimeout;
@Value("${http.connect.request.timeout}")
private int httpConnectRequestTimeout;
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(getClientHttpRequestFactory());
return restTemplate;
}
private ClientHttpRequestFactory getClientHttpRequestFactory() {
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(httpConnectTimeout)
.setConnectionRequestTimeout(httpConnectRequestTimeout)
.build();
CloseableHttpClient client = HttpClientBuilder
.create()
.useSystemProperties()
.setDefaultRequestConfig(config)
.build();
return new HttpComponentsClientHttpRequestFactory(client);
}
}
application.yamlのMicroservice BおよびCで構成:
http:
connect:
timeout: 5000
request:
timeout: 5000
Microservice BとCは罰金を開始しますが、Aは、このエラーを与えます: Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'http.connect.timeout' in value "${http.connect.timeout}
microservice Aのダミーの値を設けることなく、この問題を回避する最善の方法は何ですか?
rustyx:
溶液1:追加で構成階層を使用する@Configuration
ことができるクラスRestTemplate
豆を、唯一B及びCのためにそれを活性化する(またはプロパティが利用可能な場合)。
@Configuration
@ConditionalOnProperty("http.connect.timeout")
public class HttpConnectionConfiguration {
// rest of code ...
解決方法2:使用するデフォルト。以来デフォルトのタイムアウトである-1
ことを使用し、:
@Value("${http.connect.timeout:-1}")
private int httpConnectTimeout;
@Value("${http.connect.request.timeout:-1}")
private int httpConnectRequestTimeout;