我的项目在Spring 4.3.4、Hibernate 5.2.4和Ehcache 3.3上
我正在寻找一个具有单一JSR-107(JCache)CacheManager的解决方案,用于整个应用程序,以提供:
这里主要关注的是Hibernate。事实上,这是一个为其区域设置默认模板的问题。在回顾了很多话题之后,我还没有找到一个完全合适的解决方案。
因此,如果它存在,我恳请专家指出它。高度赞赏仅采用编程方式进行配置(不需要ehcache.xml)。
补充:(在回答@Anthony Dahanne):在我发布此主题之前,我已经在您要指出的项目中看到了解决方案。更重要的是,这个项目是我一周前调查的起点。
但该解决方案不仅涉及Spring,甚至包括Hibernate的几个命名缓存区域的显式声明,我们可以在CacheConfiguration#CreateCacheCacheConfications方法中找到。
这在一个包含100500个不同实体、NaturalKeys等的真实项目中是不合适的,这些实体由Hibernate管理,因为对于所有这些实体,它应该动态创建适当的区域。我将Hibernate的区域工厂的主要功能区分开来,认为它能够自动完成这项神奇的工作。但是我们在定制的JCacheRealonFactory类中的指向项目中看到了什么?直接禁止它生成新区域,这是通过无条件异常来实现的,任何尝试都会抛出该异常(它甚至用“......但确保所有缓存都已存在,以防止自发创建配置不良的缓存......”注释)。
理想的解决方案必须能够建立唯一的“默认模板”(在CacheManager级别),就像它在encache.xml(...j cache:defaults default-template = " myDefaultTemplate...), ...但是没有xml。
我们从来不想要默认配置(又名新的可变配置
)。但是,设置有意义的默认值是可以接受的。因此,在你的情况下,我会使用定制的JCacheRegionFactory
。
请参阅本文。
在ehcache3示例github repo上有一个JHipster fullstack演示示例
此示例基于Spring Boot以编程方式设置ehcache3缓存,将其公开为JSR-107 CacheManager
此缓存与 Hibernate 结合使用,也可以独立使用。
如果允许我执行以下操作: 为什么我主要不被允许做以下事情? 但我必须具体说明以下几点: C11引入了默认的模板参数,现在我完全无法理解它们。
7.11. 模板缓存 代码中有一个低效率的地方:每次显示一个页面,renderTemplate都要调用ParseFile。更好的做法是在程序初始化的时候对每个模板调用ParseFile一次,将结果保存为*Template类型的值,在以后使用。 首先,我们创建一个全局map,命名为templates。templates用于储存*Template类型的值,使用string索引。 然后,我们创建一个in
JSDoc的默认模板中提供了几个选项,您可以使用自定义外观和内容来生成文档。 要使用这些选项,您必须为JSDoc创建一个配置文件,并在配置文件中设置相应的选项。 Generating pretty-printed source files(生成适合打印的文档) 默认情况下,JSDoc的默认模板为你的源文件生成适合打印的文档。在文档中,它还链接到那些适合的打印文件。 要禁用适合打印的文件,设置选项t
问题内容: Hibernate使用的默认缓存的名称是什么?甚至有默认的缓存,还是必须添加缓存提供程序才能利用缓存? 我以为是EHCache,但我认为必须对其进行配置…默认情况下它不是“那里” … 问题答案: Hibernate已经通过持久上下文提供了一种称为 一级缓存 的缓存机制。它在 Session作用域内,默认情况下处于启用状态,无法关闭。 诸如EHCache之类的缓存提供程序提供了另一种称为
问题内容: 在编写RESTful Web服务时,如果在客户端(当前是.NET胖客户端)上启用任何类型的缓存,则会遇到问题。默认情况下,Jersey不发送任何类型的缓存控制标头,因此客户端将自动缓存大多数页面(这似乎是有效的行为)。 我希望默认情况下,Jersey发送“ no-cache”的缓存控件,然后特别是响应将覆盖该缓存控件。 有没有办法用泽西岛做到这一点? 我发现RESTeasy可以使用@N
问题内容: 我正在尝试将Infinispan配置为休眠二级缓存。一切都很好,但是我想调整默认配置,即所有缓存共享的值。 缓存是用于注明实体自动创建的,我可以通过一个在对其进行自定义一个通过。但是,我希望所有这些缓存都具有默认值(例如,逐出策略)。 另一件事是,我想将所有这些生成的缓存标记为“分布式”(默认情况下它们是“本地的”)。 这是我的摘录: 我该怎么做? 问题答案: 实体的默认缓存配置名为: