最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳談@Cacheable不起作用的原因:bean未序列化問題

 更新時(shí)間:2022年01月03日 10:35:01   作者:z1014347942  
這篇文章主要介紹了@Cacheable不起作用的原因:bean未序列化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@Cacheable不起作用的原因:bean未序列化

SpringMVC中將serviceImpl的方法返回值緩存在redis中,發(fā)現(xiàn)@Cacheable失效

是返回的Blogger自定義實(shí)體類沒有實(shí)現(xiàn)序列化接口

無(wú)法存入到redis中。implements一下Serializable接口即可!

@Cacheable注解式緩存不起作用的情形

@Cacheable注解式緩存使用的要點(diǎn):正確的注解式緩存配置,注解對(duì)象為spring管理的hean,調(diào)用者為另一個(gè)對(duì)象。有些情形下注解式緩存是不起作用的:同一個(gè)bean內(nèi)部方法調(diào)用,子類調(diào)用父類中有緩存注解的方法等。后者不起作用是因?yàn)榫彺媲忻姹仨氉叽聿庞行?,這時(shí)可以手動(dòng)使用CacheManager來(lái)獲得緩存效果。

使用注解式緩存的正確方式

<cache:annotation-driven cache-manager="springCacheManager" proxy-target-class="false"/>
<bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
? ? <property name="configLocation" value="classpath:ehcache.xml"/>
? ? <property name="cacheManagerName" value="ehcache"/>
</bean>
<bean id="springCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
?? ?<property name="cacheManager" ref="ehcacheManager"/>
</bean>

要點(diǎn):@Cacheable(value="必須使用ehcache.xml已經(jīng)定義好的緩存名稱,否則會(huì)拋異常")

@Component
public class CacheBean {
?? ?@Cacheable(value="passwordRetryCache",key="#key")
?? ?public String map(String key) {
?? ??? ?System.out.println("get value for key: "+key);
?? ??? ?return "value: "+key;
?? ?}
?? ?public String map2(String key) {
?? ??? ?return map(key);
?? ?}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:cache.xml" })
public class CacheTester {
?? ?@Autowired CacheManager cacheManager;
?? ?@Autowired CacheBean cacheBean;
?? ?@Test public void cacheManager() {
?? ??? ?System.out.println(cacheManager);
?? ?}
?? ?@Test public void cacheAnnotation() {
?? ??? ?cacheBean.map("a");
?? ??? ?cacheBean.map("a");
?? ??? ?cacheBean.map("a");
?? ??? ?cacheBean.map("a");
?? ??? ?System.out.println(cacheManager.getCacheNames());
?? ?}
}

輸出:

get value for key: a
[authorizationCache, authenticationCache, shiro-activeSessionCache, passwordRetryCache]

稍微改造一下,讓ehcache支持根據(jù)默認(rèn)配置自動(dòng)添加緩存空間,這里提供自定義的MyEhCacheCacheManager即可

<bean id="springCacheManager" class="com.itecheast.ite.domain.util.MyEhCacheCacheManager">
?? ?<property name="cacheManager" ref="ehcacheManager"/>
</bean>

另一種改造方式,找不到已定義的緩存空間時(shí)不緩存,或者關(guān)閉全部緩存。把cacheManagers配置去掉就可以關(guān)閉圈閉緩存。

<bean id="springCacheManager" class="org.springframework.cache.support.CompositeCacheManager">
?? ?<property name="cacheManagers">
?? ??? ?<list>
?? ??? ??? ?<bean class="org.springframework.cache.ehcache.EhCacheCacheManager"></bean>
?? ??? ??? ?<!-- <bean class="com.itecheast.ite.domain.util.MyEhCacheCacheManager"></bean> 這個(gè)會(huì)自動(dòng)創(chuàng)建緩存空間 -->
?? ??? ?</list>
?? ?</property>
? ? <property name="fallbackToNoOpCache" value="true"/>
</bean>

調(diào)用相同類或父類方法沒有緩存效果:這時(shí)可以選擇手動(dòng)使用CacheManager。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:cache.xml" })
public class CacheTester {
?? ?@Test public void cacheAnnotation() {
?? ??? ?this.map("a");
?? ??? ?this.map("a");
?? ?}
?? ?@Cacheable(value="passwordRetryCache",key="#key")
?? ?public String map(String key) {
?? ??? ?System.out.println("get value for key: "+key);
?? ??? ?return "value: "+key;
?? ?}
}

或者再換一種方式:手動(dòng)使用代理方式調(diào)用同類方法也是可以的

public class CacheBean {
?? ?@Autowired ApplicationContext applicationContext;
?? ?@Cacheable(value="passwordRetryCache",key="#key")
?? ?public String map(String key) { ?//方法不能為private,否則也沒有緩存效果
?? ??? ?System.out.println("get value for key: "+key);
?? ??? ?return "value: "+key;
?? ?}
?? ?public String map2(String key) {
?? ??? ?CacheBean proxy = applicationContext.getBean(CacheBean.class);
?? ??? ?return proxy.map(key); //這里使用proxy調(diào)用map就可以緩存,而直接調(diào)用map則沒有緩存
?? ?}
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 將bean注入到Spring中的方式總結(jié)

    將bean注入到Spring中的方式總結(jié)

    在Java的Spring框架中,將bean注入到容器中是核心概念之一,這是實(shí)現(xiàn)依賴注入的基礎(chǔ),Spring提供了多種方式來(lái)將bean注入到容器中,本文給大家總結(jié)了將bean注入到Spring中的幾種方式,需要的朋友可以參考下
    2023-12-12
  • 解決spring?data?jpa?saveAll()?保存過慢問題

    解決spring?data?jpa?saveAll()?保存過慢問題

    這篇文章主要介紹了解決spring?data?jpa?saveAll()保存過慢問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 解析Java線程同步鎖的選擇方法

    解析Java線程同步鎖的選擇方法

    本篇文章是對(duì)Java線程同步鎖的選擇方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 處理Log4j2不能打印行號(hào)的問題(AsyncLogger)

    處理Log4j2不能打印行號(hào)的問題(AsyncLogger)

    這篇文章主要介紹了處理Log4j2不能打印行號(hào)的問題(AsyncLogger),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解SpringBoot 發(fā)布ApplicationEventPublisher和監(jiān)聽ApplicationEvent事件

    詳解SpringBoot 發(fā)布ApplicationEventPublisher和監(jiān)聽ApplicationEvent事

    這篇文章主要介紹了詳解SpringBoot 發(fā)布ApplicationEventPublisher和監(jiān)聽ApplicationEvent事件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-06-06
  • Spring使用Redis限制用戶登錄失敗的次數(shù)及暫時(shí)鎖定用戶登錄權(quán)限功能

    Spring使用Redis限制用戶登錄失敗的次數(shù)及暫時(shí)鎖定用戶登錄權(quán)限功能

    這篇文章主要介紹了Spring使用Redis限制用戶登錄失敗的次數(shù)及暫時(shí)鎖定用戶登錄權(quán)限功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • mybatis實(shí)現(xiàn)特殊字段加密方式

    mybatis實(shí)現(xiàn)特殊字段加密方式

    這篇文章主要介紹了mybatis實(shí)現(xiàn)特殊字段加密,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Java 構(gòu)造方法的使用詳解

    Java 構(gòu)造方法的使用詳解

    構(gòu)造方法是類的一種特殊方法,用來(lái)初始化類的一個(gè)新的對(duì)象,在創(chuàng)建對(duì)象(new 運(yùn)算符)之后自動(dòng)調(diào)用。Java 中的每個(gè)類都有一個(gè)默認(rèn)的構(gòu)造方法,并且可以有一個(gè)以上的構(gòu)造方法
    2021-11-11
  • IDEA下lombok安裝及找不到get,set的問題的解決方法

    IDEA下lombok安裝及找不到get,set的問題的解決方法

    這篇文章主要介紹了IDEA下lombok安裝及找不到get,set的問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java用?Gradle配置compile及implementation和api的區(qū)別

    Java用?Gradle配置compile及implementation和api的區(qū)別

    這篇文章主要介紹了Java用Gradle配置compile及implementation和api的區(qū)別,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06

最新評(píng)論

普陀区| 轮台县| 赤水市| 宜州市| 临颍县| 井陉县| 墨竹工卡县| 奈曼旗| 宝坻区| 和平区| 南京市| 怀来县| 南华县| 米泉市| 常州市| 泽普县| 济南市| 江津市| 新宁县| 沙坪坝区| 界首市| 武川县| 修水县| 自治县| 德钦县| 蓝山县| 石家庄市| 宾阳县| 金山区| 奇台县| 安庆市| 宝山区| 巫山县| 汝阳县| 龙海市| 衡阳县| 肇州县| 久治县| 稻城县| 元江| 大邑县|