SpringBoot+ Ehcache整合及其功能实现

一.创建MyApplicationRunnerehcache  文件

 

1.ehcache  文件

<?xml version="1.0" encoding="UTF-8"?>

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

    <diskStore path="java.io.tmpdir"/> 

    <!--
    Mandatory Default Cache configuration. These settings will be applied to caches
    created programmtically using CacheManager.add(String cacheName)
    -->
    <!--
       name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。
    -->
    <defaultCache
            maxElementsInMemory="1000"
            eternal="true"
            timeToIdleSeconds="600"
            timeToLiveSeconds="600"
            overflowToDisk="true"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
	<cache name="test2" 
		maxElementsInMemory="1000"
            eternal="true"
            timeToIdleSeconds="600"
            timeToLiveSeconds="600"
            overflowToDisk="true"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
	
	/>  
    <cache name="tagCache" eternal="true" maxElementsInMemory="10000"
		maxElementsOnDisk="0" overflowToDisk="false"
		diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="0"
		memoryStoreEvictionPolicy="LRU" />
</ehcache>

 2.MyApplicationRunner 文件   (需要放入缓存的数据,我这里放的是id ,name)

package com.huishu.attractInvestment.webapp.user;

import java.util.List;
import java.util.Map;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Reference;
import com.huishu.attractInvestment.base.api.IntfRcSysAtlasService;
import com.huishu.common.EhcacheUtil;

import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

/**
 * @author guo 启动任务
 */
@Component
public class MyApplicationRunner implements ApplicationRunner {

	@Reference
    IntfRcSysAtlasService atlasService;
	@Override
	public void run(ApplicationArguments var1) throws Exception {
        try {
            //补丁的企业标签(5000)
           List<Map<String, Object>> queryForList = atlasService.queryForList("  select id,label_name name from t_rc_enterprise_label where  state='1' and updator='guo'  ");
           if (queryForList.size()>0) {
        	   for (int i = 0; i < queryForList.size(); i++) {
        		   if (queryForList.get(i).get("id")!=null&&queryForList.get(i).get("name")!=null) {
        			   Cache cache =  EhcacheUtil.getInstance().get("tagCache");
                                    //需要放入缓存的数据,我这里放的是id ,name
        			   Element element = new Element(queryForList.get(i).get("id").toString(),queryForList.get(i).get("name").toString());
                           cache.put(element);
        		   }
				
			}
		   } 
        } catch (Exception e) {
            e.printStackTrace();
        }
	}

}

二.创建 EhcacheUtil  工具类

package com.huishu.common;

import java.net.URL;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class EhcacheUtil {  
    
    private static final String path = "/ehcache.xml";  
  
    private URL url;  
  
    private CacheManager manager;  
  
    private static EhcacheUtil ehCache;  
  
    private EhcacheUtil(String path) {  
        url = getClass().getResource(path);  
        manager = CacheManager.create(url);  
    }  
  
    public static EhcacheUtil getInstance() {  
        if (ehCache== null) {  
            ehCache= new EhcacheUtil(path);  
        }  
        return ehCache;  
    }  
    public static String getTag(String key) {  
        try {
            Cache cache = getInstance().get("tagCache");
            if(cache.isKeyInCache(key) && null!=cache.get(key)){
                return cache.get(key).getObjectValue().toString();
            }
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (CacheException e) {
            e.printStackTrace();
        }
        return "";
    }  
  
    public void put(String cacheName, String key, Object value) {  
        Cache cache = manager.getCache(cacheName);  
        Element element = new Element(key, value);  
        cache.put(element);  
    }  
  
    public Object get(String cacheName, String key) {  
        Cache cache = manager.getCache(cacheName);  
        Element element = cache.get(key);  
        return element == null ? null : element.getObjectValue();  
    }  
  
    public Cache get(String cacheName) {  
        return manager.getCache(cacheName);  
    }  
  
    public void remove(String cacheName, String key) {  
        Cache cache = manager.getCache(cacheName);  
        cache.remove(key);  
    }  
  
} 

三. 取出放入缓存的数据

EhcacheUtil.getTag(id); // id就是上面绿色字说的,放入缓存的id,取出来对应的name

有什么问题欢迎留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10000guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值