之前介绍过的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; } }
相关推荐
在"SpringCacheWeb"这个压缩包文件中,可能包含了Spring Cache在Web应用中的配置示例,包括XML配置文件、Java配置类,以及使用注解的Controller和Service类。通过研究这些示例,你可以更好地理解如何在实际项目中...
它可以与多种缓存提供商(如 Ehcache、Guava Cache 或 Redis)集成,帮助提升应用性能,减少数据库查询。通过注解驱动,可以在方法级别声明缓存,使缓存管理变得简单。 **Thymeleaf** Thymeleaf是一个现代的服务器...
- 不仅支持Ehcache,还可以集成其他缓存解决方案,如Guava Cache、Redis等。 - `@CacheConfig`注解可以全局配置缓存,而`@Cacheable`、`@CachePut`和`@CacheEvict`则用于具体方法级别的控制。 5. **缓存的最佳...
在Java中,我们可以使用多种库来实现缓存,例如Ehcache、Guava Cache或者Spring框架提供的缓存抽象。 在给出的描述中,我们看到一个基于Spring的项目中,开发者希望创建一个能够通过HTTP请求刷新的缓存,并且能够...
在Java中,Spring Cache 提供了多种缓存抽象,包括 EhCache、Guava、 Hazelcast 和 Redis 等。这个例子可能使用了其中的一种,具体使用哪种需要查看源代码来确定。 通常,使用 `@Cacheable` 需要以下配置: 1. **...
- **在Spring MVC中的应用**:Guava可以帮助优化代码,例如使用Guava的Cache实现高效的缓存策略,使用Optional类避免空指针异常等。 5. **项目实战**: - **初始化项目**:使用Spring Initializr或者Maven/Gradle...
2. **缓存**: Guava的Cache实现可以用于高效的缓存策略。 3. **函数式编程**: Guava的函数接口和 Predicates 可以帮助实现函数式编程风格。 4. **并发工具**: Guava提供了如Lists、Sets、Maps的线程安全版本以及...
1. **缓存技术**:Java中的缓存通常涉及到Ehcache、Redis和Guava Cache等。它们能够提高数据访问速度,减少数据库负载。了解缓存策略(如LRU、LFU)和缓存穿透、缓存击穿、缓存雪崩问题及其解决方案是关键。 2. **...
10. **cache**:缓存模块允许开发者在Spring应用中轻松集成缓存机制,如 EhCache、Guava Cache等。Schema文件定义了如何配置缓存管理器、缓存注解、缓存策略等。 以上是对Spring Framework 4.1.6.RELEASE中各模块...
5. **缓存机制**:为了提高性能,书中可能会介绍如 EhCache、Guava Cache 或 Redis 这样的缓存解决方案,它们可以在不依赖EJB的情况下提高应用响应速度。 6. **测试与部署**:TDD(Test-Driven Development)和持续...
5. **cache**: 这个模块实现了缓存抽象,支持各种缓存解决方案,如 EhCache、Guava Cache 和 Hazelcast。通过缓存,可以提高应用程序的性能,减少对数据库或其他昂贵资源的访问。 6. **lang**: 这个模块通常包含...
Spring的缓存抽象层提供了多种缓存实现的统一接口,如 EhCache、Guava Cache 或 Redis,支持注解驱动的缓存管理,提高应用性能。 5. **context**: Context模块是Spring的核心,它提供了依赖注入(DI)和面向切面...
- 可能使用缓存技术来提高查询速度,例如使用Ehcache或Guava Cache存储常用数据。 - 数据库索引的合理设计可以显著提升查询效率。 8. **测试** - 系统开发过程中需要进行单元测试、集成测试和系统测试,确保各个...
10. **cache**:Spring的缓存模块提供了统一的缓存抽象,支持多种缓存实现,如 EhCache、Guava、Hibernate等。Schema文件定义了如何配置缓存管理器、缓存注解、缓存策略等。 通过学习和使用这些schema文件,开发者...
Spring Cache模块提供了统一的缓存抽象,支持多种缓存实现,如 EhCache、Guava 和 Redis。4.1.1.RELEASE版对缓存的配置和管理进行了优化,增强了对注解的支持,使得缓存操作更加简便。 6. **AOP(Aspect-Oriented ...
8. **缓存机制**: 如Ehcache和Guava Cache等Java缓存库,可提升前端请求的响应速度,减少不必要的服务器计算和数据库查询。 9. **错误处理和日志记录**: Java的Exception处理机制和Log4j、SLF4J等日志框架,对于...
Spring的缓存抽象层提供了多种缓存机制的统一接口,如 EhCache、Guava Cache 或 Redis。通过在方法上添加注解,可以轻松启用和管理缓存,提高应用性能。 6. **lang** 这个模块包含了一些辅助工具类,如运行时异常...
5. **cache** - Spring的缓存抽象层,允许在应用程序中轻松集成各种缓存解决方案,如EhCache、Guava或 Hazelcast。通过缓存注解和配置,你可以实现数据的快速访问和减少数据库负载。 6. **lang** - 这可能包含一些...
2. 数据缓存:为了提高性能,系统可能采用缓存策略,如使用Ehcache或Guava Cache,缓存常用的数据,减少数据库访问。 3. 并发控制:J2SE提供的synchronized关键字和并发工具类(如Semaphore、ExecutorService)有助...
6. **缓存抽象**:引入了统一的缓存抽象,支持多种缓存实现,如Ehcache、Guava Cache等,简化了缓存的管理和使用。 7. **Java配置**:Spring 3.2开始鼓励使用Java配置类代替XML配置,这使得配置更加直观且易于测试...