`

Guava之controller中使用缓存cache

阅读更多

之前介绍过的Guava这个工具包中有很多方便的用法,下面要使用它封装的Cache来实现功能.

示例:

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/hello")
public class HelloController {
	
	private static Logger logger = LoggerFactory.getLogger(HelloController .class);

	public static LoadingCache<String,Object> cacheBuilder;

	@Autowired
	private OverviewService overviewService;

	static OverviewParameter op ;
	
	@RequestMapping(value="/hh",method=RequestMethod.GET)
	public Result<?> sayHello(OverviewParameter overviewParameter){
		Result<?> result = null;
		setOviewParameter(overviewParameter);
		ObjectResultEx<SummaryVo> resObj  = (ObjectResultEx<SummaryVo>) getDataInCache("summary", overviewParameter);
		...	
		return result;
	}

	/**
	 * 根据键值获取缓存中的数据
	 */
	private Object getDataInCache(final String key, OverviewParameter overviewParameter){
		logger.info("before refresh cache, key:{}, param:{}",key, JSONObject.toJSONString(overviewParameter));
		op = overviewParameter;
		try {
			if ((cacheBuilder != null) && ((ObjectResultEx) cacheBuilder.get(key)).isSuccess()){
				return cacheBuilder.get(key);
                        }else {
				return commonCache(new CacheLoader<String, Object>() {
					@Override
					public Object load(String key) throws Exception {
						logger.info("refresh cache, key:{}, param:{}",key, JSONObject.toJSONString(op));
						switch (key){
							case "summary":
								return overviewService.overviewSummary(op);
							case "grantNums":
								return overviewService.overviewGrantNums(op);
							case "creditNums":
								return overviewService.overviewCreditNums(op);
							case "riskNums":
								return overviewService.overviewRiskNums(op);
							default:
								return new ObjectResultEx<>().makeFailedResult();
						}
					}
				}).get(key);
			}
		} catch (Exception e) {
			logger.error("获取缓存中的数据出错", e);
		}
		return new ObjectResultEx<>().makeFailedResult();
	}

	/**
	 * 为缓存设置loader
	 */
	private LoadingCache<String, Object> commonCache(CacheLoader<String, Object> loader) {
		synchronized (logger){
			cacheBuilder =  CacheBuilder
					.newBuilder()
					.refreshAfterWrite(1, TimeUnit.MINUTES)
					.build(loader);
		}
		return cacheBuilder;
	}
}

 

分享到:
评论

相关推荐

    Spring基于注解的缓存配置--web应用实例

    在"SpringCacheWeb"这个压缩包文件中,可能包含了Spring Cache在Web应用中的配置示例,包括XML配置文件、Java配置类,以及使用注解的Controller和Service类。通过研究这些示例,你可以更好地理解如何在实际项目中...

    spring-boot-mybatis-cache-thymeleaf学习练习demo源码

    它可以与多种缓存提供商(如 Ehcache、Guava Cache 或 Redis)集成,帮助提升应用性能,减少数据库查询。通过注解驱动,可以在方法级别声明缓存,使缓存管理变得简单。 **Thymeleaf** Thymeleaf是一个现代的服务器...

    springMVC+Ehcache+MySQL

    - 不仅支持Ehcache,还可以集成其他缓存解决方案,如Guava Cache、Redis等。 - `@CacheConfig`注解可以全局配置缓存,而`@Cacheable`、`@CachePut`和`@CacheEvict`则用于具体方法级别的控制。 5. **缓存的最佳...

    Java Cache详解及简单实现

    在Java中,我们可以使用多种库来实现缓存,例如Ehcache、Guava Cache或者Spring框架提供的缓存抽象。 在给出的描述中,我们看到一个基于Spring的项目中,开发者希望创建一个能够通过HTTP请求刷新的缓存,并且能够...

    spring_cacheable_demo_v1.zip

    在Java中,Spring Cache 提供了多种缓存抽象,包括 EhCache、Guava、 Hazelcast 和 Redis 等。这个例子可能使用了其中的一种,具体使用哪种需要查看源代码来确定。 通常,使用 `@Cacheable` 需要以下配置: 1. **...

    springmvc-swagger.zip

    - **在Spring MVC中的应用**:Guava可以帮助优化代码,例如使用Guava的Cache实现高效的缓存策略,使用Optional类避免空指针异常等。 5. **项目实战**: - **初始化项目**:使用Spring Initializr或者Maven/Gradle...

    JavaExercisesSpring_GU-main.rar

    2. **缓存**: Guava的Cache实现可以用于高效的缓存策略。 3. **函数式编程**: Guava的函数接口和 Predicates 可以帮助实现函数式编程风格。 4. **并发工具**: Guava提供了如Lists、Sets、Maps的线程安全版本以及...

    Java面试专题答案.7z

    1. **缓存技术**:Java中的缓存通常涉及到Ehcache、Redis和Guava Cache等。它们能够提高数据访问速度,减少数据库负载。了解缓存策略(如LRU、LFU)和缓存穿透、缓存击穿、缓存雪崩问题及其解决方案是关键。 2. **...

    spring-framework-4.1.6.RELEASE-schema.zip

    10. **cache**:缓存模块允许开发者在Spring应用中轻松集成缓存机制,如 EhCache、Guava Cache等。Schema文件定义了如何配置缓存管理器、缓存注解、缓存策略等。 以上是对Spring Framework 4.1.6.RELEASE中各模块...

    expert+one-on-one+j2ee+development+without+ejb中文版.rar

    5. **缓存机制**:为了提高性能,书中可能会介绍如 EhCache、Guava Cache 或 Redis 这样的缓存解决方案,它们可以在不依赖EJB的情况下提高应用响应速度。 6. **测试与部署**:TDD(Test-Driven Development)和持续...

    spring-5.2.19.RELEASE-schema.zip

    5. **cache**: 这个模块实现了缓存抽象,支持各种缓存解决方案,如 EhCache、Guava Cache 和 Hazelcast。通过缓存,可以提高应用程序的性能,减少对数据库或其他昂贵资源的访问。 6. **lang**: 这个模块通常包含...

    spring最全约束文件

    Spring的缓存抽象层提供了多种缓存实现的统一接口,如 EhCache、Guava Cache 或 Redis,支持注解驱动的缓存管理,提高应用性能。 5. **context**: Context模块是Spring的核心,它提供了依赖注入(DI)和面向切面...

    java图书管理系统

    - 可能使用缓存技术来提高查询速度,例如使用Ehcache或Guava Cache存储常用数据。 - 数据库索引的合理设计可以显著提升查询效率。 8. **测试** - 系统开发过程中需要进行单元测试、集成测试和系统测试,确保各个...

    最新版spring-framework-5.0.0.RELEASE-schema.zip约束

    10. **cache**:Spring的缓存模块提供了统一的缓存抽象,支持多种缓存实现,如 EhCache、Guava、Hibernate等。Schema文件定义了如何配置缓存管理器、缓存注解、缓存策略等。 通过学习和使用这些schema文件,开发者...

    spring-framework-4.1.1.RELEASE-schema

    Spring Cache模块提供了统一的缓存抽象,支持多种缓存实现,如 EhCache、Guava 和 Redis。4.1.1.RELEASE版对缓存的配置和管理进行了优化,增强了对注解的支持,使得缓存操作更加简便。 6. **AOP(Aspect-Oriented ...

    java常用api文档前端相关

    8. **缓存机制**: 如Ehcache和Guava Cache等Java缓存库,可提升前端请求的响应速度,减少不必要的服务器计算和数据库查询。 9. **错误处理和日志记录**: Java的Exception处理机制和Log4j、SLF4J等日志框架,对于...

    spring-5.3.14-schema.zip

    Spring的缓存抽象层提供了多种缓存机制的统一接口,如 EhCache、Guava Cache 或 Redis。通过在方法上添加注解,可以轻松启用和管理缓存,提高应用性能。 6. **lang** 这个模块包含了一些辅助工具类,如运行时异常...

    最新版spring-framework-5.0.1.RELEASE-schema.zip约束

    5. **cache** - Spring的缓存抽象层,允许在应用程序中轻松集成各种缓存解决方案,如EhCache、Guava或 Hazelcast。通过缓存注解和配置,你可以实现数据的快速访问和减少数据库负载。 6. **lang** - 这可能包含一些...

    j2se航空订票系统

    2. 数据缓存:为了提高性能,系统可能采用缓存策略,如使用Ehcache或Guava Cache,缓存常用的数据,减少数据库访问。 3. 并发控制:J2SE提供的synchronized关键字和并发工具类(如Semaphore、ExecutorService)有助...

    spring 3.2jar包

    6. **缓存抽象**:引入了统一的缓存抽象,支持多种缓存实现,如Ehcache、Guava Cache等,简化了缓存的管理和使用。 7. **Java配置**:Spring 3.2开始鼓励使用Java配置类代替XML配置,这使得配置更加直观且易于测试...

Global site tag (gtag.js) - Google Analytics