通过注解从对象类型创建缓存

Create cache from object type through annotations

所以,

我正在尝试将我们现有的缓存 (ehcache) 转换为 ignite 缓存,并迁移到 spring 注释。我 运行 在使注释与我们现有的缓存一样工作时遇到了一些困难 - 我们现有的缓存是在我们缓存新 class 的内容时自动创建的,并且新缓存具有相同的名称作为对象的 class.

所有当前的缓存逻辑(连同大多数正常的 CRUD 操作逻辑)都在一个抽象 class 中,它针对我们所有的持久对象进行了扩展。不过,在研究 spring 注释时,似乎我需要在方法上定义缓存名称——这显然不适用于抽象 class,除非我希望我们所有的对象都在相同的缓存(可能但绝对不理想)。理想情况下,我会将缓存名称指定为“#this.class.toString”,但缓存名称中不允许使用 SPEL,就像在密钥中一样。

似乎动态解析缓存的唯一方法是创建自己的缓存解析器,但由于某些原因,IgniteCache 没有扩展 springframework Cache,而是 javax Cache,并且缓存解析器有到 return 前者。所以我什至不清楚 Ignite 缓存如何与 spring 注释一起工作?

这对我来说似乎是一个非常简单的用例,所以 spring 注释迫使我在方法上提供一个明确的名称似乎很奇怪,当我假设任何重要大小的大多数应用程序都是抽象他们的持久化方法,我觉得我一定错过了一些重要的文档,但我确实找不到它。有没有办法在具体实现上指定缓存的名称,但在抽象方法上保留缓存注释?

谢谢!

你的问题很笼统,不太清楚你想做什么。 "your existing caching" 首先是什么?我猜你需要一些方法来标记你实际缓存东西的地方。我假设您已经了解需要在此处放置缓存注释。

至于自动创建缓存,我不会切换到不同的缓存系统 and 来尝试实现它。尝试先迁移到具有现有缓存基础结构的缓存注释,然后再迁移到 ignite。

让我们假装你仍然做这两件事。你是对的 CacheResolver 是要走的路,它可以适应常规 org.springframework.cache.Cachejavax.cache.Cache。一旦您的设置有效,我将执行以下操作:

  • 在您的 CacheResolver 实现中,注入已配置的缓存管理器
  • 根据方法调用,找出要使用的缓存名称(获取方法的 return 类型,提取 FQN)
  • 检查缓存管理器是否有这样的缓存。如果是,return。如果它没有创建新的缓存并添加它然后 return 那

如果您正在使用 JCacheCacheManager,您可以调用 addCache 来创建一个新的缓存,然后将结果包装在 JCacheCache 中以符合 [=10= 的签名].

最后说明:根据 FQN 自动创建缓存对我来说似乎有点脆弱,特别是如果你有子 类。您需要对您创建的缓存和应用于它们的设置(过期、大小等)进行一些控制。