spring-boot-starter-data-jpa 的二級(jí)緩存

Spring Data JPA是更大的Spring Data系列的一部分官紫,可以輕松實(shí)現(xiàn)基于JPA的存儲(chǔ)庫(kù)。它用來(lái)處理對(duì)基于JPA的數(shù)據(jù)訪問(wèn)層支持增強(qiáng)胞谈。有了它薇宠,我們能更加容易構(gòu)建出,使用數(shù)據(jù)訪問(wèn)技術(shù)的Spring應(yīng)用程序统舀。

在相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)匆骗,實(shí)現(xiàn)應(yīng)用程序的數(shù)據(jù)訪問(wèn)層一直很麻煩。必須編寫(xiě)太多樣板代碼來(lái)執(zhí)行簡(jiǎn)單查詢以及執(zhí)行分頁(yè)和審計(jì)誉简。Spring Data JPA旨在通過(guò)減少實(shí)際需要的工作量來(lái)顯著改善數(shù)據(jù)訪問(wèn)層的實(shí)現(xiàn)碉就。作為開(kāi)發(fā)人員,只需編寫(xiě)存儲(chǔ)庫(kù)接口闷串,包括自定義查找器方法铝噩,Spring將自動(dòng)提供實(shí)現(xiàn)。

特征

  • 基于Spring和JPA構(gòu)建存儲(chǔ)庫(kù)的復(fù)雜支持
  • 支持Querydsl謂詞窿克,從而支持類型安全的JPA查詢
  • 透明審核域類
  • 分頁(yè)支持骏庸,動(dòng)態(tài)查詢執(zhí)行,集成自定義數(shù)據(jù)訪問(wèn)代碼的能力
  • 支持基于XML的實(shí)體映射
  • 基于JavaConfig的存儲(chǔ)庫(kù)配置年叮,介紹@EnableJpaRepositories

1具被、依賴

implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.hibernate:hibernate-jcache')
implementation('org.ehcache:ehcache')

此處需要注意,如果高版本的 SpringBoot只损,我們需要使用org.hibernate:hibernate-jcache一姿,而不是org.hibernate:hibernate-ehcache。否則啟動(dòng)異常

2跃惫、配置

2.1 ehcache配置

在resources 目錄中創(chuàng)建ehcache.xml配置ehcache叮叹。

這里需要注意的是,百度里面的文章大部分都是告訴大家怎么配置ehcache2.x,但是ehcache的2.x和3.x完全就兩碼事情了爆存,所以如果不經(jīng)過(guò)思考蛉顽,一通 copy 那栽跟頭是肯定得了。

下面我貼出我項(xiàng)目中使用的配置:

<?xml version="1.0" encoding="UTF-8"?>
<eh:config
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xmlns:eh='http://www.ehcache.org/v3'
        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.3.xsd">
    <!--指定緩存目錄-->
    <eh:persistence directory="${java.io.tmpdir}/cfa-cache-data"/>
    
    <!--緩存模板-->
    <eh:cache-template name="default">
        <eh:expiry>
            <eh:ttl unit="seconds">600</eh:ttl>
        </eh:expiry>
        <eh:resources>
            <!--堆內(nèi)內(nèi)存可以放2000個(gè)條目先较,超出部分堆外100MB-->
            <eh:heap unit="entries">2000</eh:heap>
            <eh:offheap unit="MB">100</eh:offheap>
        </eh:resources>
    </eh:cache-template>

    <!--實(shí)際的緩存區(qū)間携冤,繼承了default緩存模板,cfa 完全使用模板默認(rèn)-->
    <eh:cache alias="cfa" uses-template="default">
        
    </eh:cache>

    <!--下面兩個(gè)繼承了default緩存模板悼粮,但覆蓋了緩存的過(guò)期時(shí)間-->
    <eh:cache alias="authority" uses-template="default">
        <eh:expiry>
            <eh:ttl unit="hours">1</eh:ttl>
        </eh:expiry>
    </eh:cache>

    <eh:cache alias="lapp_service" uses-template="default">
        <eh:expiry>
            <eh:ttl unit="hours">24</eh:ttl>
        </eh:expiry>
    </eh:cache>
</eh:config>

2.2 SpringBoot配置

由于data-jpa 使用了 hibernate 作為底層實(shí)現(xiàn),所以我們配置二級(jí)緩存其實(shí)就是基于 hibernate 的二級(jí)緩存曾棕。

hibernate 在啟動(dòng)時(shí)扣猫,會(huì)默認(rèn)讀取 classpath 目錄下面的hibernate.properties配置。所以我們需要在resources目錄中創(chuàng)建這個(gè)文件翘地。

文件內(nèi)容:

hibernate.format_sql=true
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.region_prefix=cfa_repo_
hibernate.cache.region.factory_class=org.hibernate.cache.jcache.internal.JCacheRegionFactory
hibernate.cache.provider_configuration_file_resource_path=ehcache.xml
hibernate.cache.use_structured_entries=true
hibernate.generate_statistics=false
hibernate.javax.cache.missing_cache_strategy=create

此處我們需要注意的是factory_class的配置申尤,如果你去百度hibernate的二級(jí)緩存配置,就這一項(xiàng)你可以百度出五個(gè)不同的版本衙耕。然并卵瀑凝,基本沒(méi)有對(duì)的。因?yàn)檫@個(gè)版本更新太快臭杰,類也變得有點(diǎn)快粤咪。經(jīng)過(guò)一番嘗試之后,得出我當(dāng)前這個(gè)版本factory_class配置有效的類渴杆,所以注意寥枝,不一定 copy我的就有用。

2.3 啟用注解

//在Boot 項(xiàng)目的啟動(dòng)類上標(biāo)注@EnableCaching來(lái)開(kāi)啟緩存功能
@SpringBootApplication
@EnableCaching
public class LappApplication {

    public static void main(String[] args) {
        SpringApplication.run(LappApplication.class, args);
    }
}

3磁奖、應(yīng)用緩存

在需要開(kāi)啟二級(jí)緩存的實(shí)體類上大標(biāo)注

@Entity
@Table(name = "lapp_unit"))
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Unit {
  ....
}

嗯囊拜,然后就沒(méi)有然后了。在使用 jpa 的 findById 方法進(jìn)行查詢和 save 進(jìn)行更新數(shù)據(jù)的時(shí)候比搭,hibernate 就會(huì)使用到緩存了冠跷。具體測(cè)試,可以自行玩耍身诺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜜托,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霉赡,更是在濱河造成了極大的恐慌橄务,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穴亏,死亡現(xiàn)場(chǎng)離奇詭異蜂挪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嗓化,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門棠涮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人刺覆,你說(shuō)我怎么就攤上這事严肪。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵诬垂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我伦仍,道長(zhǎng)结窘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任充蓝,我火速辦了婚禮隧枫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谓苟。我一直安慰自己官脓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布涝焙。 她就那樣靜靜地躺著卑笨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仑撞。 梳的紋絲不亂的頭發(fā)上赤兴,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音隧哮,去河邊找鬼桶良。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沮翔,可吹牛的內(nèi)容都是我干的陨帆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼采蚀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疲牵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起榆鼠,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瑰步,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后璧眠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體缩焦,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年责静,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袁滥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灾螃,死狀恐怖题翻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤嵌赠,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布塑荒,位于F島的核電站,受9級(jí)特大地震影響姜挺,放射性物質(zhì)發(fā)生泄漏齿税。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一炊豪、第九天 我趴在偏房一處隱蔽的房頂上張望凌箕。 院中可真熱鬧,春花似錦词渤、人聲如沸牵舱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芜壁。三九已至,卻和暖如春高氮,著一層夾襖步出監(jiān)牢的瞬間沿盅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工纫溃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腰涧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓紊浩,卻偏偏與公主長(zhǎng)得像窖铡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坊谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容