나는 부팅 응용 프로그램을 봄이 이미 같은 우는 소리 종속 항아리에서 하나 개의 자동차 configuraton 클래스의 빈 생성 :봄 부팅 응용 프로그램에서 기존 bean을 바꾸는 방법은 무엇입니까?
@Bean
@Order(100)
public StaticRouteLocator staticRouteLocator(AdminServerProperties admin) {
Collection<ZuulRoute> routes = Collections
.singleton(new ZuulRoute(admin.getContextPath() + "/api/turbine/stream/**",
properties.getUrl().toString()));
return new StaticRouteLocator(routes, server.getServletPrefix(), zuulProperties);
}
지금 나는이 콩을 대체 할,하지만 난 여전히 원하지 않는 콩을 가지고이 항아리가 필요합니다 창조. 그래서 다음과 같이 메인 자동 설정 클래스에 또 다른 bean 생성 메소드를 추가했습니다 :
@Bean(name="patchedStaticRouteLocator")
@Order(10)
@Primary
@ConditionalOnMissingBean
public StaticRouteLocator patchedStaticRouteLocator(AdminServerProperties admin) {
Collection<ZuulProperties.ZuulRoute> routes = Collections
.singleton(new ZuulProperties.ZuulRoute(admin.getContextPath(),
properties.getUrl().toString()));
return new StaticRouteLocator(routes, server.getServletPrefix(), zuulProperties);
}
그러나 이것은 대상 빈을 대체하지 못했습니다. 오류 메시지는 명확하고 이해하기 쉽습니다.
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.cloud.netflix.zuul.filters.RouteLocator] is defined: more than one 'primary' bean found among candidates: [routeLocator, patchedStaticRouteLocator, staticRouteLocator, compositeRouteLocator, applicationRouteLocator]
제 질문은 스프링 부트에서 기존 빈을 바꿀 올바른 방법은 무엇입니까? 미리 감사드립니다.
감사합니다. 그러나 나는 그것을 'BeanPostProcessor' 컴포넌트를 구현함으로써 완성시켰다. – leo
당신은 환영합니다. 그럼에도 불구하고 좋은 해결책을 찾았습니다. –