Could not instantiate cache implementation异常处理

引用:

今天遇到了一个很奇怪的问题 我照例增加了一套新功能,但一切就绪调试的时候,报了这个错

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/application-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Could not instantiate cache implementation
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1260)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:438)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
... 40 more
Caused by: org.hibernate.HibernateException: Could not instantiate cache implementation
at org.hibernate.cache.CacheFactory.createCache(CacheFactory.java:64)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:214)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:799)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:733)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1257)
... 49 more
Caused by: org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hibernate.cache.use_second_level_cache | hibernate.cache.use_query_cache]
at org.hibernate.cache.NoCacheProvider.buildCache(NoCacheProvider.java:21)
at org.hibernate.cache.CacheFactory.createCache(CacheFactory.java:61)
... 56 more

 

 

 

解决办法:

我们这个工程并没有写hibernate.hbm.xml文件,直接在spring配置文件里写的。无奈我又新建了这个文件。以下是内容:

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
</session-factory>
</hibernate-configuration>

 

 

在spring配置文件中加入了下面的属性:

<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>

 

重启Tomcat后,ok了。

 

 

 

以上引用http://wangzhen-1104.iteye.com/blog/344542

 

 

把:classpath:hibernate.cfg.xml改成classpath:hibernate_.xml 对应XML文件名也改成这样,我的正常了,好像是“.”的问题?不解

Spring Boot 应用中遇到 `Could not instantiate bean class [org.springframework.boot.context.event.EventPublishingRunListener]` 错误通常表明在启动过程中 Spring 无法创建该类的实例。这可能是由于多种原因造成的,包括类路径问题、版本冲突、依赖缺失或类本身被错误地修改。 ### 常见原因及解决方案 1. **依赖缺失或版本不兼容** 确保项目中包含正确的 Spring Boot 依赖。`EventPublishingRunListener` 属于 `spring-boot` 模块,因此需要确保 `spring-boot` 和 `spring-boot-autoconfigure` 的版本一致且完整。 在 Maven 项目中,检查 `pom.xml` 中的依赖配置: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>${spring.boot.version}</version> </dependency> ``` 如果使用 Gradle,则确保: ```groovy implementation "org.springframework.boot:spring-boot:${springBootVersion}" implementation "org.springframework.boot:spring-boot-autoconfigure:${springBootVersion}" ``` 2. **类路径冲突** 如果项目中存在多个版本的 Spring Boot 依赖,可能会导致类加载冲突。检查是否引入了冲突的第三方库或手动添加的旧版本 Spring Boot JAR 包。 使用 Maven 可以通过以下命令查看依赖树: ```bash mvn dependency:tree ``` 对于 Gradle: ```bash gradle dependencies ``` 确保没有重复或冲突的 `spring-boot` 依赖。 3. **构建工具缓存问题** 有时构建工具(如 Maven 或 Gradle)的本地缓存可能损坏,导致依赖解析失败。尝试清除本地仓库缓存并重新构建项目: - Maven: ```bash mvn dependency:purge-local-repository mvn clean install ``` - Gradle: ```bash gradle clean build --refresh-dependencies ``` 4. **自定义 RunListener 配置错误** 如果项目中通过 `spring.factories` 文件自定义了 `RunListener`,请确保配置正确。`EventPublishingRunListener` 是 Spring Boot 默认的监听器之一,如果手动配置了其他实现,可能导致冲突。 检查 `src/main/resources/META-INF/spring.factories` 文件内容: ```properties org.springframework.context.ApplicationContextInitializer=\ org.springframework.boot.context.ContextIdApplicationContextInitializer org.springframework.boot.SpringApplicationRunListener=\ org.springframework.boot.context.event.EventPublishingRunListener ``` 确保没有拼写错误或重复的类名。 5. **JVM 参数或类加载器问题** 在某些情况下,JVM 参数(如 `-javaagent`)可能影响类加载行为。如果使用了类似 `spring-instrument` 的依赖,请确保正确配置了 `InstrumentationLoadTimeWeaver` [^2]。 6. **IDE 缓存问题** 如果使用 IDE(如 IntelliJ IDEA 或 Eclipse),有时 IDE 的缓存可能导致类加载异常。尝试清理项目并重新导入依赖: - IntelliJ IDEA:`File > Invalidate Caches / Restart` - Eclipse:清理项目并重新执行 `Maven > Update Project` ### 示例:修复依赖冲突 以下是一个修复依赖冲突的示例 `pom.xml` 片段,确保 `spring-boot` 和 `spring-boot-autoconfigure` 使用相同版本: ```xml <properties> <spring.boot.version>2.7.12</spring.boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>${spring.boot.version}</version> </dependency> </dependencies> ``` ### 验证修复 完成上述修复步骤后,重新启动 Spring Boot 应用并观察日志输出。如果问题仍然存在,建议启用调试日志以获取更详细的错误信息: ```yaml logging: level: org.springframework.boot: DEBUG ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值