宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見(jiàn)問(wèn)題
產(chǎn)品動(dòng)態(tài)
精選推薦

Spring Boot 2.x基礎(chǔ)教程:EhCache緩存的使用

管理 管理 編輯 刪除

在Spring Boot中通過(guò)@EnableCaching注解自動(dòng)化配置合適的緩存管理器(CacheManager),Spring Boot根據(jù)下面的順序去偵測(cè)緩存提供者:

  • Generic
  • JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others)
  • EhCache 2.x
  • Hazelcast
  • Infinispan
  • Couchbase
  • Redis
  • Caffeine
  • Simple

除了按順序偵測(cè)外,我們也可以通過(guò)配置屬性spring.cache.type來(lái)強(qiáng)制指定。我們也可以通過(guò)debug調(diào)試查看cacheManager對(duì)象的實(shí)例來(lái)判斷當(dāng)前使用了什么緩存。在上一篇open in new window中,我們也展示了如何去查看當(dāng)前使用情況。

當(dāng)我們不指定具體其他第三方實(shí)現(xiàn)的時(shí)候,Spring Boot的Cache模塊會(huì)使用ConcurrentHashMap來(lái)存儲(chǔ)。而實(shí)際生產(chǎn)使用的時(shí)候,因?yàn)槲覀兛赡苄枰嗥渌匦?,往往就?huì)采用其他緩存框架,所以接下來(lái)我們會(huì)分幾篇分別介紹幾個(gè)常用優(yōu)秀緩存的整合與使用。

#使用EhCache

本篇我們將介紹如何在Spring Boot中使用EhCache進(jìn)程內(nèi)緩存。這里我們將沿用上一篇open in new window的案例結(jié)果來(lái)進(jìn)行改造,以實(shí)現(xiàn)EhCache的使用。

先回顧下這個(gè)基礎(chǔ)案例的三個(gè)部分:

User實(shí)體的定義

@Entity
@Data
@NoArgsConstructor
public class User {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

User實(shí)體的數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)(涵蓋了緩存注解)

@CacheConfig(cacheNames = "users")
public interface UserRepository extends JpaRepository<User, Long> {

    @Cacheable
    User findByName(String name);

}

測(cè)試驗(yàn)證用例(涵蓋了CacheManager的注入,可用來(lái)觀察使用的緩存管理類)

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter51ApplicationTests {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private CacheManager cacheManager;

    @Test
    public void test() throws Exception {
        // 創(chuàng)建1條記錄
        userRepository.save(new User("AAA", 10));

        User u1 = userRepository.findByName("AAA");
        System.out.println("第一次查詢:" + u1.getAge());

        User u2 = userRepository.findByName("AAA");
        System.out.println("第二次查詢:" + u2.getAge());
    }

}

接下來(lái)我們通過(guò)下面的幾步操作,就可以輕松的把上面的緩存應(yīng)用改成使用ehcache緩存管理。

第一步:在pom.xml中引入ehcache依賴

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>
在Spring Boot的parent管理下,不需要指定具體版本,會(huì)自動(dòng)采用Spring Boot中指定的版本號(hào)。

第二步:在src/main/resources目錄下創(chuàng)建:ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd">

    <cache name="users"
           maxEntriesLocalHeap="200"
           timeToLiveSeconds="600">
    </cache>

</ehcache>

完成上面的配置之后,再通過(guò)debug模式運(yùn)行單元測(cè)試,觀察此時(shí)CacheManager已經(jīng)是EhCacheManager實(shí)例,說(shuō)明EhCache開(kāi)啟成功了?;蛘咴跍y(cè)試用例中加一句CacheManager的輸出,比如:

@Autowired
private CacheManager cacheManager;

@Test
public void test() throws Exception {
    System.out.println("CacheManager type : " + cacheManager.getClass());

    userRepository.save(new User("AAA", 10));

    User u1 = userRepository.findByName("AAA");
    System.out.println("第一次查詢:" + u1.getAge());

    User u2 = userRepository.findByName("AAA");
    System.out.println("第二次查詢:" + u2.getAge());
}

執(zhí)行測(cè)試輸出可以得到:

CacheManager type : class org.springframework.cache.ehcache.EhCacheCacheManager
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into user (age, name, id) values (?, ?, ?)
2020-07-14 18:09:28.465  INFO 58538 --- [           main] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_ from user user0_ where user0_.name=?
第一次查詢:10
第二次查詢:10

可以看到:

  1. 第一行輸出的CacheManager type為org.springframework.cache.ehcache.EhCacheCacheManager,而不是上一篇中的ConcurrentHashMap了。
  2. 第二次查詢的時(shí)候,沒(méi)有輸出SQL語(yǔ)句,所以是走的緩存獲取

整合成功!歡迎關(guān)注本系列教程:《Spring Boot 2.x基礎(chǔ)教程》

#代碼示例

本文的相關(guān)例子可以查看下面?zhèn)}庫(kù)中的chapter5-2目錄:


請(qǐng)登錄后查看

CRMEB 最后編輯于2025-02-26 09:48:53

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點(diǎn)贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無(wú)簡(jiǎn)介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
739
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見(jiàn)問(wèn)題 產(chǎn)品動(dòng)態(tài) 精選推薦 首頁(yè)頭條 首頁(yè)動(dòng)態(tài) 首頁(yè)推薦
取 消 確 定
回復(fù)
回復(fù)
問(wèn)題:
問(wèn)題自動(dòng)獲取的帖子內(nèi)容,不準(zhǔn)確時(shí)需要手動(dòng)修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請(qǐng)輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊(cè)

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

{{codeText}}
切換微信登錄/注冊(cè)
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開(kāi)源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服