文档章节

SpringBoot简单使用ehcache

暗中观察
 暗中观察
发布于 06/25 23:02
字数 632
阅读 169
收藏 5

1,SpringBoot版本

2.0.3.RELEASE

①,pom.xml

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</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-cache</artifactId>
		</dependency>

		<dependency>
			<groupId>net.sf.ehcache</groupId>
			<artifactId>ehcache</artifactId>
		</dependency>
	</dependencies>

②,application.properties

spring.cache.ehcache.config=classpath:/ehcache.xml

③,启用缓存注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
//启用缓存注解
@EnableCaching
public class SpringbootEhcacheApplication {

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

④,springboot为我们注入的缓存先关类

@Configuration
@ConditionalOnClass({ Cache.class, EhCacheCacheManager.class })
@ConditionalOnMissingBean(org.springframework.cache.CacheManager.class)
@Conditional({ CacheCondition.class,
		EhCacheCacheConfiguration.ConfigAvailableCondition.class })
class EhCacheCacheConfiguration {

	private final CacheProperties cacheProperties;

	private final CacheManagerCustomizers customizers;

	EhCacheCacheConfiguration(CacheProperties cacheProperties,
			CacheManagerCustomizers customizers) {
		this.cacheProperties = cacheProperties;
		this.customizers = customizers;
	}
//缓存管理器
	@Bean
	public EhCacheCacheManager cacheManager(CacheManager ehCacheCacheManager) {
		return this.customizers.customize(new EhCacheCacheManager(ehCacheCacheManager));
	}

	@Bean
	@ConditionalOnMissingBean
	public CacheManager ehCacheCacheManager() {
		Resource location = this.cacheProperties
				.resolveConfigLocation(this.cacheProperties.getEhcache().getConfig());
		if (location != null) {
			return EhCacheManagerUtils.buildCacheManager(location);
		}
		return EhCacheManagerUtils.buildCacheManager();
	}


	static class ConfigAvailableCondition extends ResourceCondition {

		ConfigAvailableCondition() {
			super("EhCache", "spring.cache.ehcache.config", "classpath:/ehcache.xml");
		}

	}

}

⑤,类路径下的ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
    <!--将缓存保存到硬盘的那个位置 -->
   <diskStore path="d:/ehcache/"></diskStore>
   <!-- 
 	<diskStore path="java.io.tmpdir"></diskStore>
 	java.io.tmpdir取值:
 	操作系统不同 这个系统属性所表示的目录也不同
	On Windows: java.io.tmpdir:[C:\Users\liyhu\AppData\Local\Temp\]
	
	On Solaris: java.io.tmpdir:[/var/tmp/]
	
	On Linux: java.io.tmpdir: [/tmp]
	
	On Mac OS X: java.io.tmpdir: [/tmp]
 	 -->

   <!--指定缓存名 -->
    <cache name="home"
           eternal="false"
           maxEntriesLocalHeap="0"
           timeToIdleSeconds="200"
           diskPersistent="true"/>
    <!-- eternal:true表示对象永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false -->
    <!-- maxEntriesLocalHeap:堆内存中最大缓存对象数,0没有限制 -->
    <!-- timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,
    如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空。
    只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态 -->
   <!-- diskPersistent:是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。 -->
   <!-- memoryStoreEvictionPolicy:如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。-->

    
</ehcache>

2,使用缓存

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache.ValueWrapper;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Service;

import com.example.demo.bean.Person;

@Service
@CacheConfig(cacheNames = "home")
public class HomeService {
//注入缓存管理器
	@Autowired
	EhCacheCacheManager cacheManager;
//使用注解缓存,key默认为入参
	@Cacheable()
	public String find(Person person) {
		person.getAge();
		System.out.println("service 进来了。。。");
		return "service find====";
	}

//手动使用缓存
	public String get(Integer age) {
//查找指定缓存home
		org.springframework.cache.Cache cache = cacheManager.getCache("home");
//根据key查找是否有缓存该值
		ValueWrapper val = cache.get(age);
		if(val!=null) {
			System.out.println("有缓存。。。");
			return val.get().toString();
		}else {
			System.out.println("没有缓存。。。");
			cache.put(age, age);
			return age.toString();
		}
		

	}

 

© 著作权归作者所有

共有 人打赏支持
暗中观察
粉丝 1
博文 71
码字总数 30506
作品 0
惠州
私信 提问
springboot中使用自定义两级缓存

  工作中用到了springboot的缓存,使用起来挺方便的,直接引入redis或者ehcache这些缓存依赖包和相关缓存的starter依赖包,然后在启动类中加入@EnableCaching注解,然后在需要的地方就可以...

泪o滴
05/23
0
0
SpringBoot注解方式整合Redis--最简单的实例

参考网页 springboot中注解实现集成redis https://blog.csdn.net/a67474506/article/details/52608855 一些SpringBoot相关知识的讲解 SpringBoot开箱即用的体现--本质上是SpringBoot提前做好...

karma123
07/04
0
0
zhys513/scm-springboot

scm-springboot 基于spring boot的统一注解缓存,支持mencached、redis、ehcache的缓存无缝切换。支持单个缓存设置过期时间,灵活的key设置规则,采用fastjson序列化与反序列化,以json串存于...

zhys513
06/28
0
0
【SpringBoot专题】快速体验

前言 在Spring 4推出来之前,我们的编码是存在一些问题,比如:大量的xml配置存在项目中,配置相当繁琐;整合第三方框架非常麻烦;开发效率和部署效率不高等问题。正是因为这些问题,Spring开...

张丰哲
08/05
0
0
恒宇少年/spring-boot-chapter

简书整套文档以及源码解析 专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Cloud 核心技术 对Spring Cloud核心技术全面讲解 003 Quer...

恒宇少年
04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

支付宝api实现转账到单个账号

项目后台需要实现用户提现功能,支付宝平台对应的就是“单笔转账到支付宝账户”。具体实现见代码,无套路! 肯定需要先申请支付宝商户账号相关信息。以下为个人沙箱环境实现代码,生产上只需...

貔貅叔
10分钟前
1
0
Spark自定义维护kafka的offset到zk

import kafka.common.TopicAndPartitionimport kafka.message.MessageAndMetadataimport kafka.serializer.StringDecoderimport kafka.utils.ZkUtilsimport org.I0Itec.zkclient.ZkC......

hblt-j
10分钟前
0
0
bash运行脚本的几种方式

bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考。 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。 方法一:切换到shell脚本...

吴伟祥
20分钟前
0
0
看图了解RocksDB

摘要: 它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。 下图为写入的流程: 可以看到主要的三...

阿里云官方博客
29分钟前
0
0
关于Python pandas模块输出每行中间省略号问题

关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大部分都是瞎写,根本就是复制黏贴以前的版本,你要想知道其...

上官夏洛特
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部