http缓存管理器_小心缓存管理器
http緩存管理器
如果使用spring和JPA,則很有可能利用ehcache(或其他緩存提供程序)。 您可以在兩種不同的情況下進(jìn)行此操作:JPA 2級(jí)緩存和spring方法緩存。
配置應(yīng)用程序時(shí),通常會(huì)設(shè)置JPA提供程序的二級(jí)緩存提供程序(在我的情況下為Hibernate),并且還使用“緩存”名稱空間配置spring。 一切正常,您將繼續(xù)進(jìn)行該項(xiàng)目。 但是有一個(gè)警告。 如果采用最直接的方法,則會(huì)得到兩個(gè)單獨(dú)的緩存管理器,它們加載相同的緩存配置文件。 從本質(zhì)上來說,這還不錯(cuò),但是要考慮一下–您是否真的需要兩個(gè)緩存管理器,以及由此可能引起的問題?
可能你不知道。 因此,您必須擺脫冗余管理器。 為此,您需要將spring緩存管理器設(shè)置為共享:
<bean id='ehCacheManager'class='org.springframework.cache.ehcache.EhCacheManagerFactoryBean'><property name='shared' value='true' /> </bean>這意味著spring不會(huì)創(chuàng)建新的緩存管理器實(shí)例,而是將重用hibernate已經(jīng)創(chuàng)建的實(shí)例。 現(xiàn)在,這里需要考慮一些問題-這取決于bean創(chuàng)建的順序–是將JPA工廠bean還是緩存管理器工廠bean放在首位。 幸運(yùn)的是,這與最終結(jié)果無關(guān)緊要,因?yàn)镾ingletonEhCacheRegionFactory如果找到現(xiàn)有實(shí)例,則會(huì)重用現(xiàn)有的緩存管理器實(shí)例。
因此,現(xiàn)在您已將緩存管理器設(shè)置為jvm-singleton。 但是,如果您部署了多個(gè)應(yīng)用程序并且正在使用JMX,則可能會(huì)遇到另一個(gè)問題。 高速緩存管理器將自身注冊(cè)為JMX Bean。 但是,當(dāng)您有單身人士時(shí),多個(gè)應(yīng)用程序?qū)L試多次注冊(cè)同一緩存管理器,這將失敗。 結(jié)果將是日志中有幾個(gè)例外,并且無法控制多個(gè)模塊的緩存管理器。 如果您使用Terracotta之類的東西,則會(huì)出現(xiàn)相同問題的副作用(緩存管理器的身份很重要)。 幸運(yùn)的是,您可以輕松解決此問題。 只需向上面顯示的bean定義添加一個(gè)屬性:
<property name='cacheManagerName' value='${module.name}' />${module.name}是使用PropertyPlaceholderConfigurer解析的PropertyPlaceholderConfigurer并且可以針對(duì)每個(gè)${module.name}應(yīng)用程序進(jìn)行配置,因此每個(gè)Web應(yīng)用程序可以具有不同的模塊名稱。 這樣,可以通過JMX以指定的名稱訪問緩存管理器。
總體而言,請(qǐng)謹(jǐn)慎使用緩存管理器。 即使在使用不同的緩存,jpa和DI提供程序的情況下,也應(yīng)驗(yàn)證上述方案。
參考:在Bozho的技術(shù)博客博客中, 請(qǐng)注意我們JCG合作伙伴 Bozhidar Bozhanov的 緩存管理器 。
翻譯自: https://www.javacodegeeks.com/2013/01/be-careful-with-cache-managers.html
http緩存管理器
總結(jié)
以上是生活随笔為你收集整理的http缓存管理器_小心缓存管理器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击犯罪(ddos攻击犯人)
- 下一篇: 适用于Java开发人员的Elastics