@FeignClient(name = "test", url="http://xxxx")
Comment puis-je changer l'URL feinte (url = "http: // xxxx") pendant l'exécution? car l'URL ne peut être déterminée qu'au moment de l'exécution.
Feign a un moyen de fournir les URL dynamiques et les points de terminaison lors de l'exécution.
Les étapes suivantes doivent être suivies:
FeignClient
, nous devons supprimer le paramètre URL. Nous devons utiliser @RequestLine
annotation pour mentionner la REST (GET, PUT, POST, etc.):@FeignClient(name="customerProfileAdapter")
public interface CustomerProfileAdaptor {
// @RequestMapping(method=RequestMethod.GET, value="/get_all")
@RequestLine("GET")
public List<Customer> getAllCustomers(URI baseUri);
// @RequestMapping(method=RequestMethod.POST, value="/add")
@RequestLine("POST")
public ResponseEntity<CustomerProfileResponse> addCustomer(URI baseUri, Customer customer);
@RequestLine("DELETE")
public ResponseEntity<CustomerProfileResponse> deleteCustomer(URI baseUri, String mobile);
}
FeignClient
avec l'encodeur, le décodeur.FeignClient
, fournissez l'URI (BaserUrl + endpoint) ainsi que les paramètres d'appel de repos, le cas échéant.@RestController
@Import(FeignClientsConfiguration.class)
public class FeignDemoController {
CustomerProfileAdaptor customerProfileAdaptor;
@Autowired
public FeignDemoController(Decoder decoder, Encoder encoder) {
customerProfileAdaptor = Feign.builder().encoder(encoder).decoder(decoder)
.target(Target.EmptyTarget.create(CustomerProfileAdaptor.class));
}
@RequestMapping(value = "/get_all", method = RequestMethod.GET)
public List<Customer> getAllCustomers() throws URISyntaxException {
return customerProfileAdaptor
.getAllCustomers(new URI("http://localhost:8090/customer-profile/get_all"));
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ResponseEntity<CustomerProfileResponse> addCustomer(@RequestBody Customer customer)
throws URISyntaxException {
return customerProfileAdaptor
.addCustomer(new URI("http://localhost:8090/customer-profile/add"), customer);
}
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public ResponseEntity<CustomerProfileResponse> deleteCustomer(@RequestBody String mobile)
throws URISyntaxException {
return customerProfileAdaptor
.deleteCustomer(new URI("http://localhost:8090/customer-profile/delete"), mobile);
}
}
Vous pouvez ajouter un paramètre URI non annoté (qui peut potentiellement être déterminé au moment de l'exécution) et qui sera le chemin de base qui sera utilisé pour la demande. Par exemple.:
@FeignClient(name = "dummy-name", url = "https://this-is-a-placeholder.com")
public interface MyClient {
@PostMapping(path = "/create")
UserDto createUser(URI baseUrl, @RequestBody UserDto userDto);
}
Et puis l'utilisation sera:
@Autowired
private MyClient myClient;
...
URI determinedBasePathUri = URI.create("https://my-determined-Host.com");
myClient.createUser(determinedBasePathUri, userDto);
Cela enverra une demande de POST
à https://my-determined-Host.com/create
( source ).
Vous pouvez créer le client manuellement:
@Import(FeignClientsConfiguration.class)
class FooController {
private FooClient fooClient;
private FooClient adminClient;
@Autowired
public FooController(ResponseEntityDecoder decoder, SpringEncoder encoder, Client client) {
this.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.requestInterceptor(new BasicAuthRequestInterceptor("user", "user"))
.target(FooClient.class, "http://PROD-SVC");
this.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin"))
.target(FooClient.class, "http://PROD-SVC");
}
}
Veuillez consulter la documentation: https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html#_creating_feign_clients_manually
Je ne sais pas si vous utilisez le ressort dépend de plusieurs profils. par exemple: comme (dev, beta, prod et ainsi de suite)
si vous dépendez de différents yml ou propriétés. vous pouvez définir FeignClient
comme: (@FeignClient(url = "${feign.client.url.TestUrl}", configuration = FeignConf.class)
)
puis
définir
feign:
client:
url:
TestUrl: http://dev:dev
dans votre application-dev.yml
définir
feign:
client:
url:
TestUrl: http://beta:beta
dans votre application-beta.yml (je préfère yml).
......
merci god.enjoy.
Dans l'interface, vous pouvez modifier l'URL par des annotations Spring. L'URI de base est configuré dans la configuration yml Spring.
@FeignClient(
name = "some.client",
url = "${some.serviceUrl:}",
configuration = FeignClientConfiguration.class
)
public interface SomeClient {
@GetMapping("/metadata/search")
String search(@RequestBody SearchCriteria criteria);
@GetMapping("/files/{id}")
StreamingResponseBody downloadFileById(@PathVariable("id") UUID id);
}