web-dev-qa-db-fra.com

Puis-je configurer une URL @FeignClient à l'aide d'un fichier properties / yml?

Mon objectif est de créer une stratégie de différentes étapes pour passer d'une communication point à point entre 2 composants à un style de communication "netflix complet" en utilisant eureka, ruban, hystrix. À chaque itération, je veux en ajouter plus pendant que j'essaie de limiter la quantité de modifications apportées au code réel. Feign est mon framework côté client préféré pour y arriver. La première étape consiste à créer un FeignClient pour communiquer avec le serveur:

@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);
}

Cela fonctionne, mais je ne veux pas que l'URL soit codée en dur dans l'annotation. Je voudrais avoir ceci: @FeignClient () et avoir une construction de propriétés comme: client.url: http: // localhost: 90

Jusqu'à présent, je n'ai trouvé aucun indice sur la façon de configurer cela et je n'ai pas trouvé de solution dans les sources de printemps.

Peut-on le faire et si oui; Comment?

23
Freek van Gool

Cela peut être fait avec un "serviceId" au lieu d'une "url". Par exemple.

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

et

foo.ribbon.listOfServers: localhost:9000

par exemple. voir http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-ribbon-without-eureka pour les documents.

37
Dave Syer

Cela peut être fait comme ceci:

@FeignClient(name="fd-mobileapi-service",url="${fdmobile.ribbon.listOfServers}")

fdmobile.ribbon.listOfServers : value est une propriété dans application.properties.

Je l'ai testé et ça marche.

20
cody123