【问题标题】:Error creating bean with name 'defaultValidator' defined in class path resource在类路径资源中定义名称为“defaultValidator”的 bean 创建错误
【发布时间】:2019-01-22 00:08:48
【问题描述】:

尝试在 JBOSS 上部署我的 Spring Boot 应用程序时出现以下错误。不过,它在嵌入式 Tomcat 服务器上运行良好。我试图浏览堆栈溢出以找到类似的问题。还没有找到解决方案。任何建议,将不胜感激。谢谢。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
00:36:34,356 ERROR [org.springframework.boot.SpringApplication] (ServerService Thread Pool -- 56) Application run failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultValidator' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.validation.Configuration.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1699) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$123/1614986064.getObject(Unknown Source)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) [spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) [spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:398) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:330) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:157) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:137) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:91) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.jboss.as.web.deployment.JBossContextConfig.lifecycleEvent(JBossContextConfig.java:187) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:115) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3775) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]
    at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:163) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:61) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:96) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_31]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_31]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_31]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_31]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_31]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.NoSuchMethodError: javax.validation.Configuration.getDefaultParameterNameProvider()Ljavax/validation/ParameterNameProvider;
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.configureParameterNameProvider(LocalValidatorFactoryBean.java:314) [spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:290) [spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695) [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    ... 30 more

【问题讨论】:

  • NoSuchMethodError 几乎总是意味着依赖版本不匹配。
  • 可能你的依赖有问题:stackoverflow.com/questions/34721932/…
  • 你找到解决这个问题的办法了吗?
  • 在你的 JBoss 中寻找验证 api 实现(jar)。

标签: spring spring-boot jboss


【解决方案1】:

当我尝试运行我的 Spring Boot 应用程序时,我也遇到了同样的问题。经过大量搜索后,我发现我的问题是我的 pom.xml 文件中可能缺少 Spring JPA、Hibernate、Mysql 或 jackson。所以我只是添加了这个依赖,它工作正常。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>        
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>            
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId> 
 </dependency>

可能会有帮助,谢谢

【讨论】:

    【解决方案2】:

    我在 Java 9 模块化应用程序中尝试使用 Spring Boot 时遇到了同样的错误。最后我不得不要求com.fasterxml.classmate。我设法使用带有以下 pom 依赖项和模块信息的 echo 控制器启动了一个 rest api:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
    module mymodule {
        requires spring.boot;
        requires spring.boot.autoconfigure;
        requires spring.core;
        requires spring.web;
        requires com.fasterxml.classmate;
    
        exports mymodule;
    
        opens mymodule;
    }
    

    【讨论】:

      【解决方案3】:

      我将 [Bean Validation API] 依赖项更新为最新的。它解决了我的问题。

      <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
      <dependency>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
          <version>2.0.1.Final</version>
      </dependency>
      

      参考链接:
      https://mvnrepository.com/artifact/javax.validation/validation-api

      【讨论】:

        【解决方案4】:

        如果 spring boot 无法自动配置 bean,则会从 org/springframework/boot/autoconfigure/validation/ 包中抛出该错误。此错误的可能原因包括依赖项不匹配、损坏的依赖项或缺少依赖项。这里是解决办法

        1. 通过右键单击您的项目来更新 maven 项目,向下滚动到 maven 并在侧边栏中选择更新 maven 项目。标记快照/发布的强制更新复选框并单击确定(Eclipse / STS IDE)。这将更新依赖项并构建修复依赖项相关问题的项目。

        1. 如果错误未解决,您还可以尝试通过将依赖项添加到您的 pom 文件来手动更新您的 bean 验证 api。 https://mvnrepository.com/artifact/javax.validation/validation-api/2.0.1.Final

        【讨论】:

          【解决方案5】:

          我遇到了与以下相同的异常。我正在使用 Tomcat 7 部署一个 Spring Boot Web 应用程序。我将其更改为 tomcat 8 并解决了。 但很明显,在大多数情况下,更换服务器并不是一个简单可行的解决方案。 为 java.lang.NoClassDefFoundError: javax/el/ELManager 添加缺少的依赖项将解决它。

          原因:org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class] 中定义名称为“defaultValidator”的 bean 创建错误:通过工厂实例化 bean方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]:工厂方法“default tValidator”抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: javax/el/ELManager 在 org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656)

          【讨论】:

            【解决方案6】:

            我在 springboot2.0 中通过在 build.gradle 中添加 org.springframework.boot:spring-boot-starter-validation 解决了它 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-10-16
              • 2019-08-17
              • 2021-09-20
              • 2019-12-30
              • 2022-01-18
              • 2019-06-16
              相关资源
              最近更新 更多