【Spring 缓存】

spring-ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
    <!-- 开启spring缓存
    <cache:annotation-driven cache-manager="cacheManager" />
    <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml" p:shared="false" />
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="cacheManagerFactory" />
        <property name="transactionAware" value="true" />此处的transactionAware表示是否事务环绕的,如果true,则如果事务回滚,缓存也回滚,默认false。 
    </bean> -->

    <!-- 开启spring缓存-->
    <cache:annotation-driven cache-manager="cacheManager" />
    <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
          p:configLocation="classpath:ehcache.xml" p:shared="false" />
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
          p:cacheManager-ref="cacheManagerFactory" />
    
</beans>

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false"
    monitoring="autodetect" dynamicConfig="true">
    <!--timeToLiveSeconds 当缓存存活n秒后销毁 -->
    <!-- 缓存配置 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:内存数量最大时是否清除。 -->
    <diskStore path="java.io.tmpdir" />
    <!-- <diskStore path="c:/cachetmpdir" /> -->
    <defaultCache maxElementsInMemory="512" eternal="false"
        timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
        maxElementsOnDisk="10000000" diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />
    <cache name="MenuInfServiceImpl_getTreeByRole"
        maxElementsInMemory="0" maxElementsOnDisk="10000000" eternal="true"
        overflowToDisk="true" diskSpoolBufferSizeMB="50" />
    <cache name="MenuInfServiceImpl_getTreeByRoleByNoSys"
        maxElementsInMemory="0" maxElementsOnDisk="10000000" eternal="true"
        overflowToDisk="true" diskSpoolBufferSizeMB="50" />
    <cache name="MenuInfServiceImpl_treegrid" maxElementsInMemory="0"
        maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true"
        diskSpoolBufferSizeMB="50" />
    <cache name="NoInterceptorServiceImpl_isNeedInterceptor" maxElementsInMemory="0"
        maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true"
        diskSpoolBufferSizeMB="50" />
    <cache name="DictCdServiceImpl_getList" maxElementsInMemory="0"
        maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true"
        diskSpoolBufferSizeMB="50" />
    <cache name="DictCdServiceImpl_getDictCd" maxElementsInMemory="0"
        maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true"
        diskSpoolBufferSizeMB="50" />
    <cache name="SysFunctionInfServiceImpl_isExistUrl" maxElementsInMemory="0"
        maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true"
        diskSpoolBufferSizeMB="50" />
    <cache name="SysFunctionInfServiceImpl_countSysByRoleAndRequest" maxElementsInMemory="0"
        maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true"
        diskSpoolBufferSizeMB="50" />
    <cache name="SysLogServiceImpl_getAllTablePK" maxElementsInMemory="0"
        maxElementsOnDisk="10000000" eternal="true" overflowToDisk="true"
        diskSpoolBufferSizeMB="50" />
</ehcache>

111

@Service("dictCdService")
public class DictCdServiceImpl extends BaseServiceImpl<TSysDictCd> implements IDictCdService {

    private IDictTpService dictTpService;// 数据字典类型

    public IDictTpService getDictTpService() {
        return dictTpService;
    }

    @Autowired
    public void setDictTpService(IDictTpService dictTpService) {
        this.dictTpService = dictTpService;
    }

    // 清空缓存
    @CacheEvict(value = { "DictCdServiceImpl_getList", "DictCdServiceImpl_getDictCd" }, allEntries = true)
    @Override
    public DictCd add(DictCd inf) {
        
    }

    // 清空缓存
    @CacheEvict(value = { "DictCdServiceImpl_getList", "DictCdServiceImpl_getDictCd" }, allEntries = true)
    @Override
    public void remove(String ids) {
        
    }

    // 清空缓存
    @CacheEvict(value = { "DictCdServiceImpl_getList", "DictCdServiceImpl_getDictCd" }, allEntries = true)
    @Override
    public Json modify(DictCd inf) {
        
    }

    @Cacheable(value = "DictCdServiceImpl_getList", key = "#dictCd.getDictTypeCd()+'_'+#dictCd.getQsr()")
    @Override
    public List<DictCd> getList(DictCd dictCd) {
        
        return olist;
    }

    @Cacheable(value = "DictCdServiceImpl_getDictCd", key = "#dictTypeCd+#dictCd")
    @Override
    public String getDictCd(String dictTypeCd, String dictCd) {
        return "";
    }
}

原文地址:https://www.cnblogs.com/kikyoqiang/p/12701344.html