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

spring-boot整合ehcache實現(xiàn)緩存機制的方法

 更新時間:2018年01月18日 09:07:57   作者:大招無限  
spring-boot是一個快速的集成框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。這篇文章主要介紹了spring-boot整合ehcache實現(xiàn)緩存機制,需要的朋友可以參考下

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

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

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

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

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

 <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文件如下

<?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的屬性。

<?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分為內存和磁盤兩級,此屬性定義磁盤的緩存位置。參數(shù)解釋如下:    

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

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

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

    cache元素的屬性:

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

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

@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()方式來創(chuàng)建一個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注解,主要標注此為配置類,優(yōu)先掃描。

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

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

  4.使用ehcache

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

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

     參數(shù)解釋:

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

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

  不多說,直接上代碼:

@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實現(xiàn)緩存機制的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • 非常全面的Java異常處理(全文干貨,值得收藏)

    非常全面的Java異常處理(全文干貨,值得收藏)

    這篇文章主要給大家介紹了非常全面的Java異常處理的相關資料,全文干貨,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 如何在Eclipse中設置Oracle的JDBC

    如何在Eclipse中設置Oracle的JDBC

    以下是對在Eclipse中設置Oracle的JDBC的具體操作方法進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • java之使用stream對日期排序方式

    java之使用stream對日期排序方式

    這篇文章主要介紹了java之使用stream對日期排序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java五子棋單機版源碼分享

    Java五子棋單機版源碼分享

    這篇文章主要為大家分享了Java五子棋單機版源碼,JavaGUI編寫單機版五子棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Servlet映射路徑匹配解析詳解

    Servlet映射路徑匹配解析詳解

    servlet是javaweb用來處理請求和響應的重要對象,本文將從源碼的角度分析tomcat內部是如何根據請求路徑匹配得到處理請求的servlet的,感興趣的可以了解一下
    2022-08-08
  • Java多線程處理List問題

    Java多線程處理List問題

    這篇文章主要介紹了Java多線程處理List問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java正則表達式易錯知識點匯總

    Java正則表達式易錯知識點匯總

    這篇文章主要總結Java正則表達式易錯知識,對易錯知識點進行分類整理,幫助大家更好的學習Java正則表達式,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 詳解java內部類的訪問格式和規(guī)則

    詳解java內部類的訪問格式和規(guī)則

    在本文里我們給大家詳細分享了關于java內部類的訪問格式和規(guī)則知識點內容,有興趣的朋友們學習下。
    2018-10-10
  • Spring boot攔截器實現(xiàn)IP黑名單的完整步驟

    Spring boot攔截器實現(xiàn)IP黑名單的完整步驟

    這篇文章主要給大家介紹了關于Spring boot攔截器實現(xiàn)IP黑名單的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring boot攔截器具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-06-06
  • 深入理解以DEBUG方式線程的底層運行原理

    深入理解以DEBUG方式線程的底層運行原理

    說到線程的底層運行原理,想必各位也應該知道我們今天不可避免的要講到JVM 了。其實大家明白了Java的運行時數(shù)據區(qū)域,也就明白了線程的底層原理,今天帶著大家一步一步DEBUG,來看看線程到底是怎么運行的,順便把IDEA的DEBUG方法簡單講一下
    2021-06-06

最新評論

江陵县| 福安市| 龙江县| 金川县| 梅河口市| 固阳县| 岳阳县| 神木县| 祁门县| 安康市| 广灵县| 西和县| 台东县| 巫山县| 论坛| 井研县| 云林县| 达日县| 吐鲁番市| 海晏县| 丰原市| 论坛| 邵阳市| 邳州市| 庆城县| 休宁县| 千阳县| 太康县| 澎湖县| 岳池县| 高清| 徐汇区| 保山市| 玛纳斯县| 普兰县| 万宁市| 巴彦淖尔市| 东海县| 隆尧县| 昌图县| 丹凤县|