@EnableFeignClients 및 @FeignClients가 'FeignContext' 자동 배선 시 실패함 No SuchBeanException
제가 쓰고 있는 마이크로 서비스는 우리 플랫폼의 다른 마이크로 서비스와 통신해야 합니다.이러한 시도에서 당사에 이상적인 솔루션은 Spring Cloud Netflix Feign을 구현하는 것입니다.
하지만, 아래의 예외 사항에 직면해 있습니다.@Autowired ReviewProvider
:
예외(원인)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.netflix.feign.FeignContext' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at org.springframework.cloud.netflix.feign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:155)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168)
ReviewProvider.java
@FeignClient("http://metadata-reviews")
public interface ReviewProvider {
@RequestMapping(path = "sessions", method = POST)
ReviewSessionDTO createSession();
}
ReviewProvider.java
@RunWith(SpringRunner.class)
@ActiveProfiles(INTEGRATION)
@ContextConfiguration(classes = AppEntry.class)
@AutoConfigureTestDatabase(replace = Replace.NONE)
@DataJpaTest
public class ReviewProviderTest {
@Autowired
private ReviewProvider provider;
private Class<? extends ReviewProvider> providerClass;
@Before
public void setup() {
providerClass = provider.getClass();
}
@Test
public void classAnnotations() {
assertTrue(providerClass.isAnnotationPresent(FeignClient.class));
assertEquals("http://metadata-reviews", providerClass.getAnnotation(FeignClient.class).value());
}
@Test
public void createSession() throws Exception {
final Method method = providerClass.getDeclaredMethod("createSession");
assertTrue(method.isAnnotationPresent(RequestMapping.class));
final RequestMapping mapping = method.getAnnotation(RequestMapping.class);
assertEquals("sessions", mapping.path());
assertEquals(0, method.getParameters().toString());
}
}
아직 해결책이 없는 것 같은데요
이 문제를 해결하기 위해 제가 한 일은 다음과 같습니다.
이 주석을 테스트 클래스에 추가합니다.
@자동 구성 가져오기({Ribbon)AutoConfiguration.class, FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class}
시도해 보세요, 만약 그것이 작동하지 않는다면, 당신은 아마도 필요할 것입니다.@EnableFeignClients
주 프로그램 구성에 대한 주석
권장되는 접근 방식은 애플리케이션 구성을 슬라이스하는 것이며, 이는 제거해야 함을 의미합니다.@EnableFeignClients
SpringBootApplication에서.
전용 구성 클래스를 추가합니다.
@Configuration
@EnableFeignClients
public class CloudConfiguration {
}
@WebMvcTest와 같은 모든 슬라이스 주석에는 SpringBootApplication의 기본 구성이 포함되어 있기 때문에 이 작업이 필요합니다.
참조:
- https://github.com/spring-projects/spring-boot/issues/7270
- https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/ #test-auto-configuration
저는 이 문제를 단지 하나로 해결했습니다.@EnableAutoConfiguration
나의 수업에 대한 주석
해야 할 일은 다음과 같습니다.
- 빌드 파일에 그라들(gradle)과 같은 유사한 종속성을 추가합니다.
'compile.springframework.cloud:spring-cloud-spring-feign'
- 인터페이스에 @FeignClient 추가
- @EnableFeignClients를 주석 @SpringBootApplication이 있는 클래스 또는 구성에 추가합니다.
저는 또한 이 문제에 직면했습니다. 저는 MariuszS의 답변을 따랐습니다.하지만 몇 가지를 알아내야 했기 때문에 여기에...우리는 @SpringBoot에게 말해야 합니다.다음과 같이 구성을 선택할 위치에서 테스트합니다.
@SpringBootTest
@ContextConfiguration(classes = { YourClientConfig.class })
기본 패키지 및 구성을 추가해야 했습니다.
@Configuration
@EnableFeignClients( basePackages = ["com.yourcompany.yourproject"])
internal open class FeignConfiguration
언급URL : https://stackoverflow.com/questions/43093968/enablefeignclients-and-feignclient-fail-on-autowiring-feigncontext-nosuchbea
'programing' 카테고리의 다른 글
하위 요소를 변경하지 않고 요소의 텍스트를 변경하려면 어떻게 해야 합니까? (0) | 2023.08.09 |
---|---|
path.vmdk와 path.vmdk 이름이 __인 path.vmdk (0) | 2023.08.09 |
Oracle의 TimeStamp 열에서 시간 부분 추출 (0) | 2023.07.20 |
스프링 부트의 유닛 테스트 또는 통합 테스트 (0) | 2023.07.20 |
SQL로 크리스마스 트리를 인쇄하려면 어떻게 해야 합니까? (0) | 2023.07.20 |