Tomcat Creating a new instance of CacheManager

项目中Tomcat 报错

警告: Creating a new instance of CacheManager using the diskStorePath "D:/Apache Tomcat 6.0.18/temp" which is already used by an existing CacheManager.

The source of the configuration was classpath.

The diskStore path for this CacheManager will be set to D:/Apache Tomcat 6.0.18/temp/ehcache_auto_created_1262783591937.

To avoid this warning consider using the CacheManager factory methods to create a singleton CacheManager or specifying a separate ehcache configuration (ehcache.xml) for each CacheManager instance.

 

解决方法:直接删点temp目录下的所有文件,重启

### `CacheManager.newInstance` 方法不存在的原因及替代方案 Ehcache 是一个广泛使用的 Java 本地缓存框架,其 `CacheManager` 类用于管理缓存实例。在早期版本中,`CacheManager.newInstance()` 是创建缓存管理器实例的常用方式。然而,在后续版本中,Ehcache 对其 API 进行了重构,`newInstance()` 方法被标记为过时并最终被移除,导致开发者在使用时遇到 `MethodNotFoundException` 或类似错误。 #### 方法移除的原因 Ehcache 的 API 设计在版本迭代中逐步优化,`newInstance()` 被移除的主要原因包括: - **单例模式的优化**:Ehcache 推荐使用单例模式管理 `CacheManager` 实例,避免重复创建和资源浪费。 - **配置加载方式的统一**:为了提高配置加载的灵活性和可维护性,Ehcache 引入了更统一的 `CacheManager.create()` 方法,支持从多种来源(如类路径、URL、输入流)加载配置文件。 - **版本兼容性与维护性**:旧方法的移除有助于简化 API,提升框架的可维护性[^1]。 #### 替代方法 目前推荐使用 `CacheManager.create()` 方法替代 `newInstance()`。该方法支持多种参数形式,包括无参创建、基于配置文件路径创建、基于 `InputStream` 创建等。 ##### 示例:使用默认配置创建 `CacheManager` ```java CacheManager cacheManager = CacheManager.create(); ``` 该方式会尝试从类路径下加载默认的 `ehcache.xml` 文件来初始化缓存管理器。 ##### 示例:使用指定配置文件路径创建 `CacheManager` ```java String configFilePath = "src/main/resources/ehcache.xml"; CacheManager cacheManager = CacheManager.create(configFilePath); ``` 该方式适用于需要加载特定配置文件的场景,确保缓存策略的灵活性和可控性。 ##### 示例:通过输入流加载配置 ```java InputStream inputStream = getClass().getResourceAsStream("/ehcache.xml"); CacheManager cacheManager = CacheManager.create(inputStream); ``` 该方式适用于配置文件不在类路径或需要动态生成配置的场景。 #### Spring Boot 中的集成方式 在 Spring Boot 应用中,可以通过 `EhCacheManagerFactoryBean` 来加载配置文件并创建 `CacheManager` 实例,再通过 `EhCacheCacheManager` 将其封装为 Spring 缓存抽象所需的 `CacheManager`。 ##### 示例:Spring Boot 中的配置类 ```java @Configuration @EnableCaching public class CacheConfig { @Bean public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() { EhCacheManagerFactoryBean factoryBean = new EhCacheManagerFactoryBean(); factoryBean.setConfigLocation(new ClassPathResource("ehcache.xml")); factoryBean.setShared(true); return factoryBean; } @Bean public EhCacheCacheManager ehCacheCacheManager(CacheManager cacheManager) { return new EhCacheCacheManager(cacheManager); } } ``` 该配置方式确保了与 Spring 缓存抽象的兼容性,同时支持从指定路径加载 Ehcache 配置文件[^2]。 ### 总结 `CacheManager.newInstance()` 方法的移除是 Ehcache 版本演进的一部分,旨在提升 API 的一致性和可维护性。开发者应使用 `CacheManager.create()` 方法作为替代,结合具体场景选择合适的参数形式。在 Spring Boot 项目中,推荐使用 `EhCacheManagerFactoryBean` 和 `EhCacheCacheManager` 实现与框架缓存抽象的集成。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值