【问题标题】:Create cache from object type through annotations通过注解从对象类型创建缓存
【发布时间】:2016-08-19 23:28:22
【问题描述】:

所以,

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

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

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

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

谢谢!

【问题讨论】:

  • 你是否在 EhCache 中使用了 Spring 注解?如果是,它是如何工作的?如果不是,首先使用它们的原因是什么?为什么不直接使用 Ignite API?

标签: spring spring-cache ignite


【解决方案1】:

您的问题非常密集,并且不太清楚您要做什么。什么是“您现有的缓存”?你需要一些方法来标记你实际缓存我猜的东西的地方。我假设你已经明白你需要在那里放置一个缓存注释。

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

让我们假装你们两个都还在做。你是对的CacheResolver 是要走的路,它可以适应常规的org.springframework.cache.Cachejavax.cache.Cache。一旦你有一个有效的设置,我会做以下事情:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多