I have one feignClient with this interface:
@FeignClient(
name = "kmr-api",
url = "${client.kmr.url}",
configuration = KmrClient.KmrClientConfiguration.class
)
public interface KmrClient {
@Configuration
class KmrClientConfiguration {
@Value("${client.kmr.access-token-uri}")
private String accessTokenUri;
@Value("${client.kmr.client-id}")
private String clientId;
// ...
@Bean
public Feign.Builder feignBuilder() {
return Feign.builder()
.retryer(Retryer.NEVER_RETRY)
.options(new Request.Options(connectTimeoutMillis, readTimeoutMillis));
}
private OAuth2ProtectedResourceDetails resource() {
ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
resourceDetails.setAccessTokenUri(this.accessTokenUri);
resourceDetails.setClientId(this.clientId);
resourceDetails.setClientSecret(this.clientSecret);
// ...
return resourceDetails;
}
@Component
class KmrApiBrandRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("brand", "renault");
}
}
}
@RequestMapping(value = "/vehicle/summary", method = RequestMethod.POST)
VehicleSummary getVehicleSummary(@RequestBody KmrVehicleId2 kmrVehicleId);
}
And associated properties such as
# Feign service
client.kmr.url=https://example/api/v1
client.kmr.access-token-uri=https://example/oauth2/access_token
client.kmr.client-id=myclientid
Now, I need several instances of this KmrClient, with the same exact interface and configuration, but with different properties. I'm trying to figure out something which could work out like this for example :
# Feign service
client.kmr[0].url=https://example/api/v1
client.kmr[0].access-token-uri=https://example/oauth2/access_token
client.kmr[0].client-id=myclientid
# Feign service
client.kmr[1].url=https://example/api/v1
client.kmr[1].access-token-uri=https://example/oauth2/access_token
client.kmr[1].client-id=myclientid
# there are 4 instances in total, one per region supported in app
From here I don't how I would load each property in client.kmr[1] and wire them into different configurations and clients.
How can I achieve this result ?