@FeignClient(name = "test", url="http://xxxx")
ランタイム中に偽のURL(url = "http:// xxxx")を変更するにはどうすればよいですか? URLは実行時にのみ決定できるためです。
Feignには、実行時に動的URLとエンドポイントを提供する方法があります。
次の手順に従う必要があります。
FeignClient
インターフェイスでは、URLパラメータを削除する必要があります。 RESTメソッド(GET、PUT、POSTなど))について言及するには、@RequestLine
アノテーションを使用する必要があります。@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
をビルドする必要があります。FeignClient
メソッドを呼び出すときに、URI(BaserUrl +エンドポイント)と、残りの呼び出しパラメーターがあれば、それを指定します。@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);
}
}
注釈なしのURIパラメーター(実行時に決定される可能性がある)を追加できます。これは、要求に使用されるベースパスになります。例えば。:
@FeignClient(name = "dummy-name", url = "https://this-is-a-placeholder.com")
public interface MyClient {
@PostMapping(path = "/create")
UserDto createUser(URI baseUrl, @RequestBody UserDto userDto);
}
そして使用法は次のようになります:
@Autowired
private MyClient myClient;
...
URI determinedBasePathUri = URI.create("https://my-determined-Host.com");
myClient.createUser(determinedBasePathUri, userDto);
これにより、POST
リクエストがhttps://my-determined-Host.com/create
( source )に送信されます。
クライアントは手動で作成できます。
@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");
}
}
ドキュメントを参照してください: https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html#_creating_feign_clients_manually
複数のプロファイルに依存するスプリングを使用するかどうかはわかりません。例:like(dev、beta、prodなど)
異なるymlまたはプロパティに依存している場合。 FeignClient
like:(@FeignClient(url = "${feign.client.url.TestUrl}", configuration = FeignConf.class)
)を定義できます
その後
定義する
feign:
client:
url:
TestUrl: http://dev:dev
application-dev.yml
定義する
feign:
client:
url:
TestUrl: http://beta:beta
application-beta.yml内(私はymlを好みます)。
…….
神に感謝。
インターフェースでは、SpringアノテーションでURLを変更できます。ベースURIは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);
}