【问题标题】:How solve Servlet Context Error into Spring?Spring如何解决Servlet上下文错误?
【发布时间】:2015-11-28 21:12:10
【问题描述】:

我正在尝试开发一个新的 Spring web 应用程序,但我遇到了配置问题..

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in ServletContext resource [/WEB-INF/spring/jpa-tx-config.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4729)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:586)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1750)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.AbstractMethodError
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 25 more

这是我的jpa-tx-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
   http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="emf"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="packagesToScan" value="my.domain"/>

        <property name="persistenceUnitName" value="persistenceUnit"/>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop> 
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                <prop key="hibernate.connection.charSet">UTF-8</prop>

                <prop key="hibernate.max_fetch_depth">3</prop>
                <prop key="hibernate.jdbc.fetch_size">50</prop>
                <prop key="hibernate.jdbc.batch_size">20</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.format_sql">true</prop>

                <prop key="org.hibernate.envers.audit_table_suffix">_H</prop>
                <prop key="org.hibernate.envers.revision_field_name">AUDIT_REVISION</prop>
                <prop key="org.hibernate.envers.revision_type_field_name">ACTION_TYPE</prop>
                <prop key="org.hibernate.envers.audit_strategy">org.hibernate.envers.strategy.ValidityAuditStrategy</prop>
                <prop key="org.hibernate.envers.audit_strategy_validity_end_rev_field_name">AUDIT_REVISION_END</prop>
                <prop key="org.hibernate.envers.audit_strategy_validity_store_revend_timestamp">True</prop>
                <prop key="org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name">AUDIT_REVISION_END_TS</prop>               
                <prop key="jadira.usertype.databaseZone">jvm</prop>
            </props>
        </property>
    </bean>

    <jpa:repositories base-package="my.repository" entity-manager-factory-ref="emf"
        transaction-manager-ref="transactionManager"/>

    <jpa:auditing auditor-aware-ref="auditorAwareBean" />

    <bean id="auditorAwareBean" class="it.cpmapave.ped.auditor.AuditorAwareBean"/>

</beans>

我认为是正确的..

我该如何解决?

编辑 添加一段我的 pom,也许可以帮助理解为什么。

这些是我的依赖版本:

<jsp.version>2.2</jsp.version>
<jstl.version>1.2</jstl.version>
<servlet.version>2.5</servlet.version>

<!-- Spring -->
<org.springframework-version>4.0.2.RELEASE</org.springframework-version>
<org.springsecurity-version>4.0.2.RELEASE</org.springsecurity-version>
<spring-data-jpa.version>1.7.2.RELEASE</spring-data-jpa.version>

<!-- Hibernate / JPA -->
<hibernate.version>5.0.0.Final</hibernate.version>
<hibernate.validator.version>5.0.0.Final</hibernate.validator.version>

<!-- Jackson -->
<jackson.version>2.2.2</jackson.version>

<!-- QueryDSL -->
<querydsl.version>3.3.2</querydsl.version>

【问题讨论】:

  • 你能添加完整的堆栈跟踪吗?
  • @AtulRai 是的!我添加它:)
  • “org.hibernate.internal.SessionFactoryImpl 处的 java.lang.AbstractMethodError”。再清楚不过了。不正确的 Hibernate jars/依赖项
  • 我认为这是库版本不匹配,请参阅this question

标签: java spring spring-mvc jpa spring-data


【解决方案1】:

尝试更改您的 pom 版本:

    <org.springframework-version>4.1.6.RELEASE</org.springframework-version>
    <org.springsecurity-version>4.0.2.RELEASE</org.springsecurity-version>
    <spring-data-jpa.version>1.8.2.RELEASE</spring-data-jpa.version>

    <hibernate.version>4.3.5.Final</hibernate.version>
    <hibernate.validator.version>5.0.0.Final</hibernate.validator.version>

我不明白为什么要降级它运行的休眠版本。但我遇到了同样的问题,使用这种方法我没有问题。

【讨论】:

    【解决方案2】:

    这似乎是 jar 版本问题 http://docs.oracle.com/javase/7/docs/api/java/lang/AbstractMethodError.html

    你能检查一下你的 spring 版本依赖是否正确吗?

    【讨论】:

    • 我编辑了我的问题,并将有关某些依赖项的版本添加到我的 pom...
    【解决方案3】:

    在我自己的情况下,我仅在尝试使用 SpringMVCproject 模板创建新的 Spring Legacy Project 时遇到此错误,并且仅在我尝试过时在一台机器GNU-Linux里面做它。 在 Windows10 上,它似乎可以作为模板规则使用。

    我的配置是 Linux Ubuntu 16 + Elipse Photon 4.8.0 + Spring Tools 3.9.6。

    在我自己的情况下需要两个修复:

    pom.xml 文件中,在标签&lt;org.springframework-version&gt; 内,模板写的是 3.1.1.RELEASE,这似乎不是正确的版本,我以这种方式更改了它:

    <org.springframework-version>3.2.3.RELEASE</org.springframework-version> 
    

    我完成的第二个修复是在 web.xml 文件中:在 &lt;servlet-name&gt; 标记内,模板写入 appServlet,您将需要此修复:

    <servlet-name>dispatcherServlet</servlet-name>
    

    保存两个文件,右键项目名称,选择Maven>Update Project,然后在服务器中运行。

    希望在你发疯之前有用。

    ----附件一----- Spring documentation 中的此引用可能有助于理解此问题。

    ---- 附件二 ---- 我之前搜索过:

    org.apache.catalina.core.ContainerBase startInternal 严重:子容器在启动期间失败

    org.apache.catalina.startup.Catalina 启动 严重:所需的服务器组件无法启动,因此 Tomcat 无法启动。

    org.apache.coyote.AbstractProtocol 销毁 严重:无法销毁与 ProtocolHandler ["http-nio-8080"] 关联的端点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多