一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring-boot整合ehcache實現緩存機制的方法

spring-boot整合ehcache實現緩存機制的方法

2021-03-23 14:12大招無限 Java教程

spring-boot是一個快速的集成框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。這篇文章主要介紹了spring-boot整合ehcache實現緩存機制,需要的朋友可以參考下

EhCache 是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。

  ehcache提供了多種緩存策略,主要分為內存和磁盤兩級,所以無需擔心容量問題。

  spring-boot是一個快速的集成框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。

  由于spring-boot無需任何樣板化的配置文件,所以spring-boot集成一些其他框架時會有略微的不同。

  1.spring-boot是一個通過maven管理的jar包的框架,集成ehcache需要的依賴如下

?
1
2
3
4
5
6
7
8
9
<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
   <groupId>net.sf.ehcache</groupId>
  <artifactId>ehcache</artifactId>
   <version>2.8.3</version>
</dependency>

    具體pom.xml文件如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.lclc.boot</groupId>
 <artifactId>boot-cache</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <!-- Inherit defaults from Spring Boot -->
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.1.3.RELEASE</version>
 </parent>
 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
  </dependency>
  <dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>17.0</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
  </dependency>
  <dependency>
   <groupId>net.sf.ehcache</groupId>
   <artifactId>ehcache</artifactId>
   <version>2.8.3</version>
  </dependency>
 </dependencies>
 <dependencyManagement>
  <dependencies>
  </dependencies>
 </dependencyManagement>
 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
 <repositories>
  <repository>
   <id>spring-snapshots</id>
   <url>http://repo.spring.io/snapshot</url>
   <snapshots>
    <enabled>true</enabled>
   </snapshots>
  </repository>
  <repository>
   <id>spring-milestones</id>
   <url>http://repo.spring.io/milestone</url>
  </repository>
 </repositories>
 <pluginRepositories>
  <pluginRepository>
   <id>spring-snapshots</id>
   <url>http://repo.spring.io/snapshot</url>
  </pluginRepository>
  <pluginRepository>
   <id>spring-milestones</id>
   <url>http://repo.spring.io/milestone</url>
  </pluginRepository>
 </pluginRepositories>
</project>

  2.使用ehcache,我們需要一個ehcache.xml來定義一些cache的屬性。

?
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
 updateCheck="false">
   <diskStore path="java.io.tmpdir/Tmp_EhCache" />
   <defaultCache eternal="false" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false"
 timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
   <cache name="demo" eternal="false" maxElementsInMemory="100" overflowToDisk="false" diskPersistent="false"
 timeToIdleSeconds="0" timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" />
</ehcache>

  解釋下這個xml文件中的標簽。

  (1).diskStore: 為緩存路徑,ehcache分為內存和磁盤兩級,此屬性定義磁盤的緩存位置。參數解釋如下:    

    user.home – 用戶主目錄
     user.dir – 用戶當前工作目錄
     java.io.tmpdir – 默認臨時文件路徑

  (2).defaultCache:默認緩存策略,當ehcache找不到定義的緩存時,則使用這個緩存策略。只能定義一個。

(3).cache:自定緩存策略,為自定義的緩存策略。參數解釋如下:

    cache元素的屬性:

name:緩存名稱
maxElementsInMemory:內存中最大緩存對象數
maxElementsOnDisk:硬盤中最大緩存對象數,若是0表示無窮大
eternal:true表示對象永不過期,此時會忽略timeToIdleSeconds和timeToLiveSeconds屬性,默認為false
overflowToDisk:true表示當內存緩存的對象數目達到了maxElementsInMemory界限后,會把溢出的對象寫到硬盤緩存中。注意:如果緩存的對象要寫入到硬盤中的話,則該對象必須實現了Serializable接口才行。
diskSpoolBufferSizeMB:磁盤緩存區大小,默認為30MB。每個Cache都應該有自己的一個緩存區。
diskPersistent:是否緩存虛擬機重啟期數據
diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認為120秒
timeToIdleSeconds: 設定允許對象處于空閑狀態的最長時間,以秒為單位。當對象自從最近一次被訪問后,如果處于空閑狀態的時間超過了timeToIdleSeconds屬性值,這個對象就會過期,EHCache將把它從緩存中清空。只有當eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示對象可以無限期地處于空閑狀態
timeToLiveSeconds:設定對象允許存在于緩存中的最長時間,以秒為單位。當對象自從被存放到緩存中后,如果處于緩存中的時間超過了 timeToLiveSeconds屬性值,這個對象就會過期,EHCache將把它從緩存中清除。只有當eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示對象可以無限期地存在于緩存中。timeToLiveSeconds必須大于timeToIdleSeconds屬性,才有意義
memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。可選策略有:LRU(最近最少使用,默認策略)、FIFO(先進先出)、LFU(最少訪問次數)。

  3.將ehcache的管理器暴露給spring的上下文容器,

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Configuration
// 標注啟動了緩存
@EnableCaching
public class CacheConfiguration {
 /*
  * ehcache 主要的管理器
  */
 @Bean(name = "appEhCacheCacheManager")
 public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean){
  return new EhCacheCacheManager (bean.getObject ());
 }
 
 /*
  * 據shared與否的設置,Spring分別通過CacheManager.create()或new CacheManager()方式來創建一個ehcache基地.
  */
 @Bean
 public EhCacheManagerFactoryBean ehCacheManagerFactoryBean(){
  EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean ();
  cacheManagerFactoryBean.setConfigLocation (new ClassPathResource ("conf/ehcache-app.xml"));
  cacheManagerFactoryBean.setShared (true);
  return cacheManagerFactoryBean;
 }
}

    @Configuration:為spring-boot注解,主要標注此為配置類,優先掃描。

    @Bean:向spring容器中加入bean。

  至此所有的配置都做好了,通過spring-boot進行集成框架就是這么簡單。

  4.使用ehcache

    使用ehcache主要通過spring的緩存機制,上面我們將spring的緩存機制使用了ehcache進行實現,所以使用方面就完全使用spring緩存機制就行了。
    具體牽扯到幾個注解:

    @Cacheable:負責將方法的返回值加入到緩存中,參數3
    @CacheEvict:負責清除緩存,參數4

     參數解釋:

    value:緩存位置名稱,不能為空,如果使用EHCache,就是ehcache.xml中聲明的cache的name
    key:緩存的key,默認為空,既表示使用方法的參數類型及參數值作為key,支持SpEL
    condition:觸發條件,只有滿足條件的情況才會加入緩存,默認為空,既表示全部都加入緩存,支持SpEL

    allEntries:CacheEvict參數,true表示清除value中的全部緩存,默認為false

  不多說,直接上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@Service
public class CacheDemoServiceImpl implements CacheDemoService {
 /**
  * 緩存的key
  */
 public static final String THING_ALL_KEY = "\"thing_all\"";
 /**
  * value屬性表示使用哪個緩存策略,緩存策略在ehcache.xml
  */
 public static final String DEMO_CACHE_NAME = "demo";
 @CacheEvict(value = DEMO_CACHE_NAME,key = THING_ALL_KEY)
 @Override
 public void create(Thing thing){
  Long id = getNextId ();
  thing.setId (id);
  data.put (id, thing);
 }
  @Cacheable(value = DEMO_CACHE_NAME,key = "#thing.getId()+'thing'")
 @Override
 public Thing findById(Long id){
  System.err.println ("沒有走緩存!" + id);
  return data.get (id);
 }
  @Cacheable(value = DEMO_CACHE_NAME,key = THING_ALL_KEY)
 @Override
 public List<Thing> findAll(){
  return Lists.newArrayList (data.values ());
 }
  @Override
 @CachePut(value = DEMO_CACHE_NAME,key = "#thing.getId()+'thing'")
 @CacheEvict(value = DEMO_CACHE_NAME,key = THING_ALL_KEY)
 public Thing update(Thing thing){
  System.out.println (thing);
  data.put (thing.getId (), thing);
  return thing;
 }
 @CacheEvict(value = DEMO_CACHE_NAME)
 @Override
 public void delete(Long id){
  data.remove (id);
 }
}

    5.只需要通過注解在service層方法上打注解便可以使用緩存,在find**上存入緩存,在delete**,update**上清除緩存。

總結

以上所述是小編給大家介紹的spring-boot整合ehcache實現緩存機制的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/lic309/p/4072848.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 爽新片xxxxxxx | 91免费精品国自产拍在线不卡 | 免费稚嫩福利 | 亚洲xxxxxhd奶水女人 | 国产精品久久久久久久福利院 | 色综合网亚洲精品久久 | 翁熄性放纵交换300章 | 99草视频 | 日比免费视频 | 80s在线| 18xxxx中国| 91制片厂制作传媒网站 | 国产精品刺激好大好爽视频 | darkside动漫在线观看 | 95在线观看精品视频 | www.尤物在线 | 亚洲国产精品一区二区久久 | 日日本老女人 | 亚洲性综合网 | 千金肉奴隶免费观看 | 国产拍拍视频一二三四区 | 国产精品高清视亚洲一区二区 | 亚洲成在人线视频 | 亚洲欧美精品一区二区 | 美女班主任让我爽了一夜视频 | 996热在线视频 | 国模丰满美女冰漪34d | 四虎影视免费观看免费观看 | 国产福利在线免费观看 | 色综合久久九月婷婷色综合 | 亚洲不卡视频在线 | 国产精品高清一区二区三区 | 美女叽叽| 99久久无色码中文字幕 | 日本指交 | 久久久高清国产999尤物 | 国产精品天天看特色大片不卡 | 男女男在线精品网站免费观看 | 欧美贵妇videos办公室360 | 美女脱了内裤让男生尿囗 | 星星动漫无删减在线观看 |