Spring Boot 2.x技术问题咨询:InfinispanCacheManager异常及启动疑问
Spring Boot 2.x + Infinispan 问题解答
嗨,咱们一步步来解决你遇到的这几个问题,结合我平时排查这类场景的经验,给你梳理下具体的思路和解决方案:
1. InfinispanCacheManager无法正常工作的排查思路
这个问题我碰到过不少,常见的原因和修复方向主要有这几个:
- 依赖配置不完整:Spring Boot 2.x集成Infinispan必须同时引入
spring-boot-starter-cache和infinispan-spring-boot-starter,少了任何一个,自动配置逻辑都不会触发。你可以检查下你的依赖文件(pom.xml或build.gradle),确保包含这两个依赖,比如Maven的配置:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-spring-boot-starter</artifactId> <version>匹配Spring Boot的版本</version> </dependency> - 缓存配置错误或缺失:如果是自定义CacheManager,一定要在配置类上加上
@EnableCaching注解,不然Spring的缓存切面不会生效。另外要注意模式选择——嵌入式模式用DefaultCacheManager,远程模式用RemoteCacheManager,别搞混了。比如嵌入式模式的基础配置:@Configuration @EnableCaching public class InfinispanCacheConfig { @Bean public DefaultCacheManager cacheManager() { return new DefaultCacheManager(); } } - 版本兼容性问题:Spring Boot 2.x的不同小版本对Infinispan的版本有严格要求,比如Spring Boot 2.3.x对应Infinispan 11.x,2.4.x对应12.x,版本不匹配很容易出现类加载失败、初始化异常这类问题,一定要对照官方的版本兼容表来选版本。
2. Metrics端点无法正常工作的解决办法
要让Infinispan的指标能通过Actuator的/metrics端点暴露出来,得从这几个方面检查:
- 缺失必要依赖:除了基础的缓存依赖,还要引入
spring-boot-starter-actuator(启用Actuator端点)和infinispan-metrics(Infinispan的metrics支持),这两个依赖缺一不可。 - 端点未正确暴露:Spring Boot 2.x默认只对外暴露
/health和/info端点,要让/metrics能访问,得在配置文件里加上:management.endpoints.web.exposure.include=metrics,health management.endpoint.metrics.enabled=true - Infinispan Metrics未启用:需要手动开启Infinispan的metrics采集功能,嵌入式模式可以在配置类里设置:
如果用starter的自动配置,也可以直接在application.properties里加:@Bean public DefaultCacheManager cacheManager() { ConfigurationBuilder configBuilder = new ConfigurationBuilder(); configBuilder.metrics().enable(true); return new DefaultCacheManager(configBuilder.build()); }infinispan.metrics.enabled=true
3. Infinispan的默认启动方式说明
分两种场景来说明:
Spring Boot集成下的默认启动
当你引入infinispan-spring-boot-starter和spring-boot-starter-cache后,Spring Boot会自动以**嵌入式模式(Embedded Mode)**启动Infinispan:
- 自动创建一个
DefaultCacheManager实例,使用Infinispan的默认配置:本地堆内存储、无持久化、无过期/驱逐策略(除非你手动配置)。 - 自动将这个CacheManager注册到Spring容器中,你可以直接用
@Cacheable、@CacheEvict等注解来使用缓存,默认会使用名为default的缓存(如果没指定缓存名称的话)。
原生Infinispan的默认启动
如果不通过Spring Boot,直接初始化DefaultCacheManager,默认也是嵌入式模式,启动一个本地缓存实例,没有集群功能,缓存条目默认会一直存在于堆内存中,直到应用停止或者手动清除。
内容的提问来源于stack exchange,提问作者PANKAJ kSHARMA
相关产品推荐
相关产品推荐

