You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot配置Infinispan作为Hibernate二级缓存遇JNDI获取CacheManager失败

解决Spring Boot配置Infinispan作为Hibernate二级缓存的JNDI异常问题

我之前也踩过这个坑!这个异常本质是Hibernate默认尝试从JNDI地址java:CacheManager获取CacheManager,但Spring Boot独立运行环境里根本没在JNDI中绑定这个实例——你参考的JBoss文档是针对WildFly/JBoss EAP服务器场景的,那种环境下服务器会自动做JNDI绑定,但Spring Boot得咱们自己配置。下面给你几个靠谱的解决方向:

1. 修正application.properties核心配置

首先把Hibernate的缓存配置改成直接指向Infinispan提供器,并且禁用JNDI查找:

# 启用二级缓存
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
# 指定用Infinispan作为缓存区域工厂
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.infinispan.InfinispanRegionFactory
# 关键:清空JNDI名称,让Hibernate不要去JNDI找CacheManager
spring.jpa.properties.hibernate.cache.infinispan.cachemanager_jndi_name=
# 如果有自定义的Infinispan配置文件,指定路径(可选)
spring.jpa.properties.hibernate.cache.infinispan.configuration=classpath:infinispan.xml

2. 确认依赖版本匹配

别忽略依赖的版本兼容性!Spring Boot版本对应的Hibernate版本要和Infinispan的Hibernate缓存适配包版本对应:

Maven示例(适配Spring Boot 2.x + Hibernate 5.x):

<dependency>
    <groupId>org.infinispan</groupId>
    <artifactId>infinispan-hibernate-cache-v53</artifactId>
    <version>12.1.7.Final</version>
</dependency>

Gradle示例:

implementation 'org.infinispan:infinispan-hibernate-cache-v53:12.1.7.Final'

3. 手动注册CacheManager Bean(兜底方案)

如果上面的配置还是没解决,直接手动创建一个本地的CacheManager Bean,让Hibernate复用这个实例:

import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.manager.EmbeddedCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;

@Configuration
public class InfinispanCacheConfig {

    @Bean
    public EmbeddedCacheManager infinispanCacheManager() throws IOException {
        // 这里可以用默认配置,也可以加载自定义的infinispan.xml
        return new DefaultCacheManager("classpath:infinispan.xml");
    }
}

然后在application.properties里加上:

# 告诉Hibernate使用已经存在的CacheManager Bean
spring.jpa.properties.hibernate.cache.infinispan.use_existing_cache_manager=true

4. 区分JBoss文档的场景差异

你参考的JBoss文档是针对服务器环境的,那种环境下服务器会自动在JNDI中注入CacheManager,但Spring Boot是独立应用,没有这个机制,所以一定要把文档里依赖JNDI的配置项去掉或者覆盖,换成Spring Boot环境的本地配置方式。


内容的提问来源于stack exchange,提问作者Pavan Jadda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:08:35