Ehcache - 找不到生成器的缓存名称

2024-03-03

我已经浏览了这里提出的很多类似问题,但我仍然无法找到解决方案,所以这是我的问题:

我正在尝试在 Spring Boot 中设置 Ehcache。

Spring 2.2.6.RELEASE
Ehcache 3.8.1

缓存服务

I've got a cache named `myCache`.
@Cacheable(value = "myCache")
@GetMapping("/get")
public String get();

缓存配置

And my config
@Configuration
@EnableCaching
public class CacheConfig {    
    public CacheConfig() {          
        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache("myCache",
                CacheConfigurationBuilder.newCacheConfigurationBuilder(SimpleKey.class, String.class, ResourcePoolsBuilder.heap(10))).build();
        cacheManager.init();
    }
}

Error

But I'm getting the following error:
java.lang.IllegalArgumentException: Cannot find cache named 'myCache' for Builder...

如果我将配置放在 xml 文件中,我设法让它工作,但我宁愿将它放在 java 中。


@Cacheable(value = "myCache")不创建名为的缓存myCache在Ehcache中。在运行时,如果一个名为myCache在 Ehcache 中可用,它将使用该缓存进行缓存。如果没有,当尝试在运行时缓存时,会出现异常java.lang.IllegalArgumentException: Cannot find cache named 'myCache'会被抛出。为了@Cacheable(value = "myCache")要使用 Ehcache 作为后端,需要在某处创建缓存,并且需要让 Spring 知道该缓存。最简单的方法是包含spring-boot-starter-cache依赖项,添加一个ehcache.xml将 Ehcache 配置添加到类路径并设置配置spring.cache.jcache.config: classpath:ehcache.xml in application.yml。您可以找到一个示例应用程序来执行此操作github https://github.com/devatherock/spring-boot-demo/tree/ehcache

相反,如果您确实想以编程方式配置 Ehcache,则需要org.springframework.cache.CacheManagerbean,初始化 Ehcache 配置并将其链接到 Spring。 bean 定义可能如下所示:

import javax.cache.Caching;

import org.ehcache.config.CacheConfiguration;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.jsr107.Eh107Configuration;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.SimpleKey;
import org.springframework.cache.jcache.JCacheCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public CacheManager ehCacheManager() {
        CacheConfiguration<SimpleKey, String> cacheConfig = CacheConfigurationBuilder
                .newCacheConfigurationBuilder(SimpleKey.class, String.class, ResourcePoolsBuilder.heap(10))
                .build();

        javax.cache.CacheManager cacheManager = Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider")
                .getCacheManager();

        String cacheName = "myCache";
        cacheManager.destroyCache(cacheName);
        cacheManager.createCache(cacheName, Eh107Configuration.fromEhcacheCacheConfiguration(cacheConfig));

        return new JCacheCacheManager(cacheManager);
    }
}

通过代码为 Spring 配置 Ehcache 的示例工作应用程序可以找到here https://github.com/devatherock/spring-boot-demo/tree/ehcach-config-in-code在 github 上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ehcache - 找不到生成器的缓存名称 的相关文章

随机推荐

  • intel core i7 处理器使用哪种缓存映射技术?

    我了解了不同的缓存映射技术 例如直接映射和完全关联或集关联映射 以及这些技术之间的权衡 维基百科 https en wikipedia org wiki Cache placement policies 但我很好奇现在Intel core
  • 在android ndk项目中添加libpng

    我搜索了很多有关将 libpng 链接到我的 android ndk 项目的主题 但我找到了解决我的问题的正确答案 我希望有人能帮助我 这是我的项目的层次结构 jni different cpp files different hpp fi
  • 在 Keras 和 Tensorflow 中复制模型以实现多线程设置

    我正在尝试在 Keras 和 TensorFlow 中实现 actor critic 的异步版本 我使用 Keras 作为构建网络层的前端 我直接使用张量流更新参数 我有一个global model和一个主要的张量流会话 但在每个线程内我正
  • 按字符串对 std::vector> 进行排序?

    我该如何排序vector通过比较pair first这是一个std string 不提供静态比较函数 也不使用boost std vector
  • 日历事件查询选择

    我尝试读出特定日历中的事件 以下是我尝试使用的代码 但我不知道选择是什么样子 我想使用日历 ID 进行选择 如果没有选择 空 它会读出所有日历 但我只想要一个 查询如下所示 public final Cursor query Uri uri
  • 文本对齐:右对齐;仅用于占位符?

    怎样才能活跃text align right 仅用于占位符
  • 从 JPQL 查询返回 JPA 实体的子集作为映射数组?

    在 JPQL 中 可以使用构造函数表达式来请求实体的子集 例如 SELECT NEW example EmployeeDetails e name e salary e department name FROM Employee e 它返回
  • GetTickCount() 实际测量什么?

    我想知道 Windows API 是做什么的GetTickCount http msdn microsoft com en us library windows desktop ms724408 28v vs 85 29 aspx实际测量
  • 嵌套多线程操作跟踪

    我有一个类似的代码 void ExecuteTraced Action a string message TraceOpStart message a TraceOpEnd message 回调 a 可以再次调用 ExecuteTraced
  • Google Sceneform – 它已被弃用吗?有替代品吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在我的 ARCore 项目 Sceneform 中使用 看来这个项目现在被称为Archived htt
  • 洗牌向量 - 样本()的所有可能结果?

    我有一个包含五个项目的向量 my vec lt c a b a c d 如果我想将这些值重新排列到一个新的向量中 随机播放 我可以使用sample shuffled vec lt sample my vec 简单 但sample 函数只给我
  • Haskell 中的验证

    我有一些需要验证的嵌套记录 我想知道惯用的 Haskell 方法是什么 简化一下 data Record Record recordItemsA ItemA recordItemB ItemB deriving Show data Item
  • 打开 JSX 文件时如何使 VS Code 将语言更改为 JavaScript React

    目前 当我打开一个 jsx文件的默认语言是纯 JavaScript 有没有办法设置编辑器根据文件扩展名更改语言 理想情况下 我可以将此设置放入本地设置配置文件或工作区特定配置文件中 我使用的版本是Version 1 15 0 insider
  • 更改 API 级别 Android Studio

    我想将 Android Studio 中的最低 SDK 版本从 API 12 更改为 API 14 我尝试在清单文件中更改它 即
  • Eclipse 中的“Android Private Libraries”文件夹是什么?

    我最初以为它是专门用于像支持库这样的官方库的 然而 每当我使用 添加到构建路径 菜单项添加自定义 JAR 时 它都会自动显示在 引用库 和 Android 私有库 中 其中之一是多余的 因为在构建时导出两者是没有意义的 此外 Android
  • 命令不同步,您现在无法运行此命令

    我正在尝试使用 mysqldb 创建一些表 问题是当执行python脚本时db pymysql 抛出错误 mysql exceptions ProgrammingError 2014 命令不同步 您现在无法运行此命令 db py impor
  • 如何使用 Dagger2 将 Activity 范围内的依赖项替换为模拟

    我的 Activity 中有范围依赖项 我想用一些模拟来测试该 Activity 我读过有关建议在测试期间用测试组件替换应用程序组件的不同方法 但我想要的是替换活动组件 例如 我想在 MVP 设置中针对模拟演示者测试活动 我相信通过在 Ac
  • PHP:如何将无穷大或 NaN 数字编码为 JSON?

    显然 无穷大和 NaN 不是 JSON 规范的一部分 因此这个 PHP 代码 numbers array numbers positive infinity INF numbers negative infinity INF numbers
  • 大数组上的分段错误

    以下代码在 2GB 机器上运行时出现分段错误 但在 4GB 机器上运行 int main int c 1000000 cout lt lt done n return 0 数组的大小仅为 4Mb C 中可以使用的数组的大小是否有限制 您可能
  • Ehcache - 找不到生成器的缓存名称

    我已经浏览了这里提出的很多类似问题 但我仍然无法找到解决方案 所以这是我的问题 我正在尝试在 Spring Boot 中设置 Ehcache Spring 2 2 6 RELEASE Ehcache 3 8 1 缓存服务 I ve got