在Tomcat 8.0.36上部署应用程序时,我会得到以下异常
org.springframework.beans.factory.BeanCreationException:错误创建名为“eventsDAOImpl”的bean --合并bean定义的后处理失败;嵌套异常为java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701),org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717),org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940),org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1816),java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511),java.util。concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) at: java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.(PersistenceAnnotationBeanPostProcessor.java:653) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.lambda$buildPersistenceMetadata$0(PersistenceAnnotationBeanPostProcessor.java:416) at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:693) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:410) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:394)在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1015) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) . 24
我使用eclipselink版本2.5.2,并在tomcat的lib文件夹中添加了以下jars
dependencies.gradle如下所示
compile (
'org.aspectj:aspectjrt:1.8.4',
'org.aspectj:aspectjweaver:1.8.4',
'org.springframework:spring-aspects:5.0.0.RELEASE',
'org.springframework:spring-jdbc:5.0.0.RELEASE',
'org.springframework:spring-jms:5.0.0.RELEASE',
'org.springframework:spring-orm:5.0.0.RELEASE',
'org.springframework:spring-oxm:5.0.0.RELEASE',
'org.springframework:spring-web:5.0.0.RELEASE',
'org.springframework:spring-webmvc:5.0.0.RELEASE',
'org.springframework:spring-instrument-tomcat:4.0.9.RELEASE'
}
provided (
'com.oracle:ojdbc6:12.1.0.1',
'org.eclipse.persistence:eclipselink:2.5.2'
)编辑1:相同的应用程序在Tomcat 9上运行良好,但在部署Tomcat 8时提供了上述异常
编辑2:在做了一些研究之后,我发现Tomcat 8正在从注释中加载PersistenceContext类--api.jar位于TOMCAT_HOME\lib文件夹中,而不是javax.persistence-api-2.2.jar和注释中可用的PersistenceContext类-api.jar不包含如下的同步方法。
package javax.persistence;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PersistenceContext {
String name() default "";
String unitName() default "";
PersistenceContextType type() default PersistenceContextType.TRANSACTION;
PersistenceProperty[] properties() default {};
}如何在Tomcat 8中提供首选项,以便Tomcat 8将从javax.persistence-api-2.2.jar而不是注释-api.jar加载PersistenceContext类
发布于 2019-09-05 08:31:49
可能您在春季数据依赖项中有冲突,第一个版本是vesion1 (或者复制两个相同的jar,您可以说)另一个版本是version2,请从pom.xml或构建路径jar中删除旧版本依赖
或
可能那里没有Spring或依赖项,请添加它。
发布于 2020-11-25 21:48:54
org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Finals提供了一个缺少API PersitanceContext().synchronization()的旧版本的.synchronization()
解决方案:在pom.xml中添加java.persistence:javax.persistence-api:2.2在hibernate-jpa-2.0-api之前
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>不知道格拉德尔,但至少你可以试试。
发布于 2020-06-08 22:10:32
我在PersistenceContext.class中看到了synchronization()方法的javax.persistence-api-2.2.jar。从Tomcat 7开始,Apache似乎已经从PersistenceContext (以及其他类)中删除了annotations-api.jar,这意味着它不能从Tomcat提供的jar加载这个类。也许您的应用程序中有另一个jar,其中包含一个旧版本的PersistenceContext?
https://stackoverflow.com/questions/57800059
复制相似问题