1

저는 Feign을 사용하여 Eureka를 통해 외부 웹 서비스를 호출하는 Spring 부트 응용 프로그램을 보유하고 있습니다. 필자는 Feign 인터페이스의 조롱 된 구현을 사용하여 애플리케이션을 실행할 수 있기를 원하므로 Eureka 또는 외부 웹 서비스를 실행하지 않아도 애플리케이션을 로컬에서 실행할 수 있습니다. 나는 이것을 할 수있게 해주는 실행 구성을 정의하는 것을 상상했지만, 이것이 작동하도록 고심하고있다. 문제는 Spring의 "마법"이 내가 시도한 것에 상관없이 Feign 인터페이스를위한 bean을 정의한다는 것이다.환경에 따라 다른 Feign 클라이언트 구현을 정의하십시오.

척하기 인터페이스

@FeignClient(name = "http://foo-service") 
public interface FooResource { 
    @RequestMapping(value = "/doSomething", method = GET) 
    String getResponse(); 
} 

서비스

public class MyService { 
    private FooResource fooResource; 

    ... 

    public void getFoo() { 
     String response = this.fooResource.getResponse(); 
     ... 
    } 
} 

나는 봄 프로파일이 "로컬"인 경우 조건부 빈을 등록 구성 클래스를 추가하는 시도,하지만 그 호출되지 않았다 그 스프링 프로파일로 어플리케이션을 실행했을 때 :

내 서비스가 실행되는 시점에서

MyService에서 FooResource 멤버 변수는

HardCodedTarget (유형 = FoorResource, URL = http://foo-service)

이 인 IntelliJ에 따라 타입이다. 이것은 Spring Cloud Netflix 프레임 워크에 의해 자동으로 생성되는 유형이므로 실제로 원격 서비스와 통신하려고 시도합니다.

구성 설정에 따라 Feign 인터페이스의 구현을 조건부로 무시할 수있는 방법이 있습니까?

답변

1

동일한 질문을 Spring Cloud Netflix github 저장소에 게시 한 후 유용한 답변은 Spring @Profile 주석을 사용하는 것이 었습니다.

@EnabledFeignClients으로 주석을 달지 않은 대체 엔트리 포인트 클래스를 만들고, 필자의 Feign 인터페이스 구현을 정의한 새로운 구성 클래스를 만들었습니다. 이제 유레카를 실행하거나 종속 서비스를 사용하지 않고도 응용 프로그램을 로컬에서 실행할 수 있습니다.