费洪荒之力解决部署Java项目遇到的Hibernate奇葩状

用Java开发了一套基×管理系统,开发技术使用的是SpringMVC ,Hibernate。部署环境是Tomcat8 ,项目在本地跑的好好的。部署思路是很简单的。直接把项目拷贝到服务器,指向一下Tomcat配置文件即可。

本来应该是很顺利很简单的事情。可是修改完配置,跑起来一看。惊呼!

其实无论部署过多少次系统,多么熟练,在跑起来之前的一刹那,总是心存忐忑,果然!

洋洋洒洒的一大篇英文错误提示又一次浮现眼前。悲乎!

这意味着又要花费 “不确定的时间” 解决这些奇葩的症状。

HTTP Status 500 - Servlet.init() for servlet springmvc threw exception

type Exception report

message Servlet.init() for servlet springmvc threw exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception

org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)

org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)

org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)

org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)

org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

java.lang.Thread.run(Unknown Source)

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)

org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)

org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)

org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)

org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)

org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)

org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)

org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:664)

org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:630)

org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:678)

org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:549)

org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:490)

org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)

javax.servlet.GenericServlet.init(GenericServlet.java:158)

org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)

org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)

org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)

org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)

org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

java.lang.Thread.run(Unknown Source)

root cause

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl

org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41)

javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276)

org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:223)

org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean.afterPropertiesSet(OptionalValidatorFactoryBean.java:40)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)

org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)

org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)

org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)

org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)

org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)

org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)

org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)

org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:664)

org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:630)

org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:678)

org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:549)

org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:490)

org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)

javax.servlet.GenericServlet.init(GenericServlet.java:158)

org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)

org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)

org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)

org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)

org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)

org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

java.lang.Thread.run(Unknown Source)

note The full stack trace of the root cause is available in the Apache Tomcat/8.5.4 logs.

Apache Tomcat/8.5.4

必须要找到解决问题的方法!

尝试1:用法眼直接看,盯了这篇文章1分钟,想了3分钟,无头无序,还是丈二和尚摸不着头脑。无奈放弃。

尝试2:用度娘

找到错误的关键字,搜!!!

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.engine.ConfigurationImp

可是度娘对英文错误,天生不敏感,翻看了前3页面的搜索结果,觉得靠谱的点了点,最终结果仍然是个死局。耗时20分钟!!!

尝试3:用杀手锏,谷歌老爹。

翻上VPN,搜索那段英文,第一条 是 stackoverflow上的一条。这是俺最喜欢的结果。急迫的点开。

在这篇文章的最佳答案中找到了这句话:

I had two version of slf4j-api in my classpath - slf4j-api-1.6.1.jar as well as slf4j-api-1.5.8.jar. I removed the latter and that solved my issue with

"java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.engine.ConfigurationImpl".

这个解决方案感觉跟自己的症状毫不相干啊。怀着将信将疑,死马当活马医的心情,去排查了一下服务器上,果然。。。

费洪荒之力解决部署Java项目遇到的Hibernate奇葩状

的确有重复的slf4j-api的jar文件。只是版本号不一样。删掉旧版本jar。

费洪荒之力解决部署Java项目遇到的Hibernate奇葩状

重启tomcat,刷新浏览器,雅致的蓝色登录页面立刻出现在眼前。

问题解决,心情释然。

人解决问题的过程属于探索未知世界的过程,像盲人摸象一样,在黑暗中,需要不停的用各种方式去尝试,不达目的不罢休,这需要我们锻炼一种坚强的心智。遇到疑难问题,才能一个个最终解决掉。

-----------------------------------------------------------------------------------------------------------------------

庖丁解码,愿跟大家分享开发中遇到的各种疑难杂症。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值