Spring 3.1缓存和配置

我最近在博客中谈论有关Spring 3.1及其新的缓存注释@Cacheable和@CacheEvict 。 与所有Spring功能一样,您需要进行一定数量的设置,并且通常使用Spring的XML配置文件来完成。 在缓存的情况下,打开@Cacheable@CacheEvict并不容易,因为您要做的就是将以下内容添加到Spring配置文件中:
<cache:annotation-driven />

…以及您的beans XML元素声明中的适当模式定义:

<beans xmlns='http://www.springframework.org/schema/beans' xmlns:p='http://www.springframework.org/schema/p'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xmlns:cache='http://www.springframework.org/schema/cache' xmlns:context='http://www.springframework.org/schema/context'xsi:schemaLocation='http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache.xsd'>

…的主要特点是:

xmlns:cache='http://www.springframework.org/schema/cache'

…和:

http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd

但是,这还不是故事的结局,因为您还需要指定一个缓存管理器和一个缓存实现。 好消息是,如果您熟悉其他Spring组件(例如数据库事务管理器)的设置,那么这样做的方式就不足为奇了。

缓存管理器类似乎是实现Spring的org.springframework.cache.CacheManager接口的任何类。 它负责管理一个或多个缓存实施,其中缓存实施实例负责实际缓存数据。

下面的XML示例摘自我最近两个博客中使用的示例代码。

<bean id='cacheManager' class='org.springframework.cache.support.SimpleCacheManager'><property name='caches'><set><beanclass='org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean'p:name='employee'/><!-- TODO Add other cache instances in here--></set></property>
</bean>

在上面的配置中,我使用Spring的SimpleCacheManager来管理其ConcurrentMapCacheFactoryBean实例,该实例的缓存实现名为:“ employee ”。

需要注意的重要一点是,您的缓存管理器必须具有cacheManager 。 如果您弄错了,那么将得到以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.interceptor.CacheInterceptor#0': Cannot resolve reference to bean 'cacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cacheManager' is definedat org.springframework.beans.factory.support.BeanDefinitionValueResolver.
resolveReference(BeanDefinitionValueResolver.java:328)at org.springframework.beans.factory.support.BeanDefinitionValueResolver.
resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
populateBean(AbstractAutowireCapableBeanFactory.java:1118)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
:
:  trace details removed for clarity
:at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
runTests(RemoteTestRunner.java:683)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'cacheManager' is definedat org.springframework.beans.factory.support.DefaultListableBeanFactory.
getBeanDefinition(DefaultListableBeanFactory.java:553)at org.springframework.beans.factory.support.AbstractBeanFactory.
getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)at org.springframework.beans.factory.support.AbstractBeanFactory.
doGetBean(AbstractBeanFactory.java:277)at org.springframework.beans.factory.support.AbstractBeanFactory.
getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.BeanDefinitionValueResolver.
resolveReference(BeanDefinitionValueResolver.java:322)

就像我在上面说的那样,在我的简单配置中,整个工作由SimpleCacheManager协调。 根据文档,这通常是“用于测试或简单的缓存声明”。 尽管您可以编写自己的CacheManager实现,但Spring的专家们为不同情况提供了其他缓存管理器

  • SimpleCacheManager –参见上文。
  • NoOpCacheManager –用于测试,因为它实际上并不缓存任何内容,尽管在这里要小心,因为在不进行缓存的情况下测试代码可能会在打开缓存时使您绊倒。
  • CompositeCacheManager –允许在单个应用程序中使用多个缓存管理器。
  • EhCacheCacheManager –包装ehCache实例的缓存管理器。 见http://ehcache.org

对于Spring Profile选择在任何给定环境中使用哪个缓存管理器似乎是一个很好的用途。 看到:?

  • 在XML Config中使用Spring配置文件
  • 使用Spring Profiles和Java配置

而且,尽管只是为了完整起见,但这只是将内容整理一下,下面是我前两个博客中使用的完整配置文件:

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans' xmlns:p='http://www.springframework.org/schema/p'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xmlns:cache='http://www.springframework.org/schema/cache' xmlns:context='http://www.springframework.org/schema/context'xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd'><!-- Switch on the Caching --><cache:annotation-driven /><!-- Do the component scan path --><context:component-scan base-package='caching' /><!-- simple cache manager --><bean id='cacheManager' class='org.springframework.cache.support.SimpleCacheManager'><property name='caches'><set><bean class='org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean' p:name='employee'/><!-- TODO Add other cache instances in here--></set></property></bean></beans>

正如哥伦波中尉喜欢说:“还有一件事,你知道让我为这个案件烦恼……”; 好吧,关于缓存管理器,有几件事让我感到困扰,例如:

  • 在谈论SimpleCacheManager时,Spring的家伙们所说的“对测试或简单的缓存声明有用”是什么意思? 您究竟应该何时愤怒地使用它而不是进行测试?
  • 最好编写自己的CacheManager实现,甚至是Cache实现吗?
  • 使用EhCacheCacheManager确切优势是什么?
  • 您真正需要多少时间CompositeCacheManager

我将来可能会研究所有这些……

祝您编程愉快,别忘了分享!

参考:来自Captain Debug's Blog博客的JCG合作伙伴 Roger Hughes的Spring 3.1 Caching and Config 。


翻译自: https://www.javacodegeeks.com/2012/09/spring-31-caching-and-config.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

按条件分类_保税仓储企业能否同时存储非保货物?“仓储货物安装台分类监管”如何申请?...

保税仓储企业能否同时存储非保货物呢&#xff1f;保税和非保货物是不是真的不能同在一个“屋檐下”呢&#xff1f;哪些企业可以开展“仓储货物按状态分类监管”业务&#xff1f;企业又该如何申请该项业务&#xff1f;本文就对这些问题进行一下梳理。什么是“仓储货物按状态分类…

ZooKeeper的原理(转)

一、ZooKeeper的角色 领导者&#xff08;Leader&#xff09;&#xff0c;负责进行投票的发起和决议&#xff0c;更新系统状态。 学习者&#xff08;Learner&#xff09;&#xff0c;包括跟随者&#xff08;Follower&#xff09;和观察者&#xff08;Observer&#xff09;&#…

java课堂笔记

转载于:https://www.cnblogs.com/16-C-kai/p/6567042.html

Spring– DAO和服务层

欢迎来到Spring教程的第三部分。 在这一部分中&#xff0c;我们将继续编写Timesheet应用程序&#xff0c;这次我们将实现DAO层&#xff0c;业务服务并编写一些测试。 在上一部分中&#xff0c;我们定义了GenericDao接口&#xff0c;该接口告诉我们需要对实体执行哪些操作。 现在…

51nod 1907(多项式乘法启发式合并)

题目&#xff1a; 分析&#xff1a; 对于一个确定的生成子图&#xff0c;很明显是在一个连通块上走&#xff0c;走完了再跳到另一个连通块上&#xff0c;假设连通块个数为cnt&#xff0c;那么答案一定是$min(a_{cnt-1},a_cnt,..,a_{n-1})$ 那现在的问题就是如何求出对于原图而言…

煮饭的机器人作文_公示|“笔随我心、心由笔动”作文大赛获奖名单

卡士大昌杯“笔随我心、心由笔动”获奖作品开平的咸汤圆滑轮记&#xff0f;我的宅家成长记折叠式小屋&#xff0f;夕阳&#xff0f;包粽子在过去的卡士大昌杯“笔随我心、心由笔动”作文活动中我们收到了许多优秀投稿经过专业团队评选得出获奖选手作品如下主办方协办方一等奖《…

BZOJ 4491: 我也不知道题目名字是什么

4491: 我也不知道题目名字是什么 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 278 Solved: 154[Submit][Status][Discuss]Description 给定一个序列A[i]&#xff0c;每次询问l,r&#xff0c;求[l,r]内最长子串&#xff0c;使得该子串为不上升子串或不下降子串 Input 第一…

Spring-boot中读取config配置文件的两种方式

了解过spring-Boot这个技术的&#xff0c;应该知道Spring-Boot的核心配置文件application.properties&#xff0c;当然也可以通过注解自定义配置文件的信息。 Spring-Boot读取配置文件的方式&#xff1a; 一.读取核心配置文件信息application.properties的内容 核心配置文件是指…

JavaFX 2 GameTutorial第5部分

介绍 这是与JavaFX 2 Game Tutorial相关的六部分系列的第五部分。 我知道自从我写关于游戏的博客以来已经很长时间了&#xff0c;但希望您仍然与我在一起。 如果您想回顾一下&#xff0c;请阅读第1部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分和第4 部分 &#xff0c;以了…

h5是可以一键打包小程序的_H5手机网站封装打包微信小程序并实现分享及微信支付...

手机网站打包小程序教程&#xff0c;生成小程序&#xff0c;网页版小程序 打包微信小程序&#xff0c;H5封装成微信小程序。微信小程序开发一般分为2种方式&#xff0c;一种就是原生开发小程序&#xff0c;一种是将手机网站打包成小程序。原生开发小程序成本较高&#xff0c;技…

Hive中的数据库、表、数据与HDFS的对应关系

1、hive数据库 我们在hive终端&#xff0c;查看数据库信息&#xff0c;可以看出hive有一个默认的数据库default&#xff0c;而且我们还知道hive数据库对应的是hdfs上面的一个目录&#xff0c;那么默认的数据库default到底对应哪一个目录呢&#xff1f;我们可以通过hive配置文件…

软件工程概论作业3

转载于:https://www.cnblogs.com/clueless/p/6568351.html

使用JSF的面向服务的UI

在大型软件开发项目中&#xff0c;面向服务的体系结构非常常见&#xff0c;因为它提供了可供不同团队或部门使用的功能接口。 创建用户界面时&#xff0c;应应用相同的原理。 对于具有开票部门和客户管理部门等的大型公司&#xff0c;组织结构图可能如下所示&#xff1a; 如果计…

pocib模板流程图_各单据流程POCIB

POCIB各阶段流程报关流程从广义上讲&#xff0c;报关是指进出境运输工具负责人、进出境口货物收发货人、进出境物品的所有人或者他们的代理人向海关办理运输工具、货物、物品进出境手续及相关手续的全过程。其中&#xff0c;进出境运输工具负责人、进出口货物收发货人、进出境物…

WinDbg 查看静态变量

有如下Class。若想查看静态变量内容。因为静态变量和类绑定&#xff0c;仅需要查看类即可。 namespace ConsoleApplication13 {class Program{public static string public_string "pubstr_static";public static string private_string "pristr_static"…

vue 固定div 滚动_vue.js-div滚动条隐藏但有滚动效果的实现方法

组件被包在一个高度固定的divmounted () {var boDiv document.getElementById(this.id);if(boDiv undefined){return;}var isFirefoxnavigator.userAgent.indexOf("Firefox")if(isFirefox>0){boDiv.addEventListener(DOMMouseScroll, function(event) { //火狐v…

JBoss核心Java Web服务

这篇博客文章涉及Web服务。 好吧&#xff0c;更确切地说&#xff0c;它处理JBoss上的“普通” java Web服务。 这意味着我们将创建一个没有任何其他框架&#xff08;如CXF&#xff0c;Axis等&#xff09;的Web服务。 JBoss它自己提供对Web服务的支持。 因此&#xff0c;如果您真…

JavaSE--for each

参考&#xff1a;http://blog.csdn.net/yasi_xi/article/details/25482173 学习多线程的时候实例化线程数组而挖掘出来的一直以来的理解误区 之前一直以为for each 本质上和for循环以及迭代器没什么区别 1 package foreach;2 3 public class ForeachDemo1 {4 5 public …

[BZOJ1726][Usaco2006 Nov]Roadblocks第二短路

1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1277 Solved: 607 [Submit][Status][Discuss]Description 贝茜把家搬到了一个小农场&#xff0c;但她常常回到FJ的农场去拜访她的朋友。贝茜很喜欢路边的风景&#xff0c;不想那么快…

mysql 5.1.62_MySQL 5.5.62 安装方法(标准配置版)

1.此安装方法适用于绝大多数MySQL版本&#xff0c;首先在MySQL官网上下载好所需版本。2.(官网可能不太好找)在我的博客列表中有一篇是MySQL官网下载链接&#xff0c;直达下载界面&#xff0c;方便。3.下载。(安装版 MSI Installer)4.下载安装包然后双击开始安装选择同意协议并…