Can I configure a @FeignClient url using a properties/yml file?

Freek van Gool picture Freek van Gool · Mar 26, 2015 · Viewed 54.5k times · Source

My goal is to create a strategy of different steps to get from a point-to-point communication between 2 components to a "full blown netflix" style of communication using eureka, ribbon, hystrix. With each iteration I want to add more while I try to limit the amount of changes to the actual code. Feign is my preferred client side framework to make this happen. First step is to create a FeignClient to communicate to the server:

@FeignClient(url = "http://localhost:9000")
interface Client {
    @RequestMapping(method = RequestMethod.GET, value = "/author/{author}/addedValue/{addedValue}")
    Result addToTotal(@RequestParam(value="author") String author, @RequestParam(value="addedValue") long addedValue);
}

This works but I don't want the URL to be hardcoded in the annotation. I would like to have this: @FeignClient() and have a properties construct like: client.url: http://localhost:9000

So far I couldn't find any clues on how to configure that and I couldn't find a solution in the spring-cloud sources.

Can it be done and if yes; how?

Answer

Dave Syer picture Dave Syer · Mar 26, 2015

It can be done with a "serviceId" instead of a "url". E.g.

@FeignClient("foo")
interface Client { ... }

and

foo.ribbon.listOfServers: localhost:9000

e.g. see http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-ribbon-without-eureka for docs.