So ersetzen Sie eine vorhandene bean im spring-boot-Anwendung?

Ich spring-boot-Anwendung, Da schon eine bean-Erstellung in einem auto-configuration-Klasse aus einer abhängigen jar wie unten:

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

Nun möchte ich diese ersetzen Bohne, aber ich muss immer noch dieses jar, die diese unerwünschte Bean Schöpfung. Also ich habe eine andere bean creation Methode in meiner main-auto-configuration-Klasse wie folgt aus:

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

Aber dieser Fehler beim ersetzen der Ziel-bean. Der Fehler msg ist klar und einfach zu verstehen:

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]

Meine Frage, was ist der richtige Weg, um Ersatz für die bestehenden bean im spring-boot? Vielen Dank im Voraus.

InformationsquelleAutor leo | 2017-01-17
Schreibe einen Kommentar