1

J'essaie d'intégrer Hystrix dans mon projet de microservice Netflix OSS de mon projet Spring-Cloud actuel &.Erreur lors de la création du bean avec le nom 'bindingService' - Eureka & Bus AMQP

J'ai un nouveau printemps la version Boot 1.4.0.RELEASE projet avec deux dépendances:

<dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-eureka</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-bus-amqp</artifactId> 
    </dependency> 

Au démarrage du projet que je reçois cette exception:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bindingService' defined in class path resource [org/springframework/cloud/stream/config/ChannelBindingServiceConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.stream.binding.ChannelBindingService]: Factory method 'bindingService' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/validation/Validator 

Cette exception ne se produit que lorsque les deux Eureka & Les dépendances AMQP de bus sont ensemble.

Il n'y a pas de configuration définie dans l'application ou bootstrap .yml/.properties.

La seule présente de classe Java est celui généré par Spring Boot:

@SpringBootApplication 
public class DummyProjectApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(DummyProjectApplication.class, args); 
    } 
} 

POM complète:

<?xml version="1.0" encoding="UTF-8"?> 
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
     <groupId>com.dummy</groupId> 
     <artifactId>dummy_project</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <packaging>jar</packaging> 
     <name>dummy_project</name> 
     <description>dummy_project</description> 
     <parent> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-parent</artifactId> 
      <version>1.4.0.RELEASE</version> 
      <relativePath /> <!-- lookup parent from repository --> 
     </parent> 
     <properties> 
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
      <java.version>1.8</java.version> 
     </properties> 
     <dependencies> 
      <dependency> 
       <groupId>org.springframework.cloud</groupId> 
       <artifactId>spring-cloud-starter-eureka</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.cloud</groupId> 
       <artifactId>spring-cloud-starter-bus-amqp</artifactId> 
      </dependency> 
     </dependencies> 
     <dependencyManagement> 
      <dependencies> 
       <dependency> 
        <groupId>org.springframework.cloud</groupId> 
        <artifactId>spring-cloud-dependencies</artifactId> 
        <version>Brixton.SR4</version> 
        <type>pom</type> 
        <scope>import</scope> 
       </dependency> 
      </dependencies> 
     </dependencyManagement> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
       </plugin> 
      </plugins> 
     </build> 
    </project> 

pleine Stack Trace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bindingService' defined in class path resource [org/springframework/cloud/stream/config/ChannelBindingServiceConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.stream.binding.ChannelBindingService]: Factory method 'bindingService' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/validation/Validator 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at com.dummy.DummyProjectApplication.main(DummyProjectApplication.java:10) [classes/:na] 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.stream.binding.ChannelBindingService]: Factory method 'bindingService' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/validation/Validator 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    ... 18 common frames omitted 
Caused by: java.lang.NoClassDefFoundError: javax/validation/Validator 
    at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_73] 
    at java.lang.ClassLoader.defineClass(Unknown Source) ~[na:1.8.0_73] 
    at java.security.SecureClassLoader.defineClass(Unknown Source) ~[na:1.8.0_73] 
    at java.net.URLClassLoader.defineClass(Unknown Source) ~[na:1.8.0_73] 
    at java.net.URLClassLoader.access$100(Unknown Source) ~[na:1.8.0_73] 
    at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_73] 
    at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_73] 
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_73] 
    at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_73] 
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_73] 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_73] 
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_73] 
    at org.springframework.cloud.stream.binding.ChannelBindingService.<init>(ChannelBindingService.java:71) ~[spring-cloud-stream-1.0.2.RELEASE.jar:1.0.2.RELEASE] 
    at org.springframework.cloud.stream.config.ChannelBindingServiceConfiguration.bindingService(ChannelBindingServiceConfiguration.java:105) ~[spring-cloud-stream-1.0.2.RELEASE.jar:1.0.2.RELEASE] 
    at org.springframework.cloud.stream.config.ChannelBindingServiceConfiguration$$EnhancerBySpringCGLIB$$dcfa32f2.CGLIB$bindingService$1(<generated>) ~[spring-cloud-stream-1.0.2.RELEASE.jar:1.0.2.RELEASE] 
    at org.springframework.cloud.stream.config.ChannelBindingServiceConfiguration$$EnhancerBySpringCGLIB$$dcfa32f2$$FastClassBySpringCGLIB$$641fb65d.invoke(<generated>) ~[spring-cloud-stream-1.0.2.RELEASE.jar:1.0.2.RELEASE] 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.cloud.stream.config.ChannelBindingServiceConfiguration$$EnhancerBySpringCGLIB$$dcfa32f2.bindingService(<generated>) ~[spring-cloud-stream-1.0.2.RELEASE.jar:1.0.2.RELEASE] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_73] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_73] 
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_73] 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    ... 19 common frames omitted 
Caused by: java.lang.ClassNotFoundException: javax.validation.Validator 
    at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_73] 
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_73] 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_73] 
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_73] 
    ... 43 common frames omitted 

Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true 

Répondre

1

Je pense que java.lang.NoClassDefFoundError: javax/validation/Validator devrait être un indice. Cette classe n'est pas incluse dans les deux dépendances (plutôt bizarres). Nous pouvons nous asseoir et discuter pour savoir si cela doit être inclus, ou vous pouvez simplement l'inclure vous-même (par exemple, via spring-boot-starter-web, qui est la source habituelle, ou spring-boot-starter-validation si vous n'avez pas besoin d'éléments Web).

+1

Le projet a été utilisé pour déterminer les dépendances à l'origine de l'exception. L'ajout du spring-boot-starter-web a résolu le problème. J'avais l'impression que Validator serait inclus dans le parent spring-boot-starter. Mon erreur. Intéressant pourquoi cette exception ne serait causée que lorsque les deux dépendances étaient ensemble. – KWP