通过ehcache以编程方式使用缓存:
跟上面的方式相同,但是缓存通过ehcache去管理,当然比使用map有N多种好处,比如缓存太大了快达到上限之后,将哪一部分缓存清除出去。这种方式完全是通过代码的方式使用ehcache缓存,虽然自由,却也很麻烦;有些比如单纯的场景下,不需要如此麻烦,直接通过注解就行了。
以前在Spring项目中要通过注解的方式使用缓存,比如借助一个jar包:ehcache-spring-annotations.jar,可以在googlecode上面下载,不过已经很久没有更新过了。
 
 
 <?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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd"> <context:component-scan
base-package="com.mpr.mprsp.mcrc.service.mcrs.precedencecode" />
<!-- ehcache config Start -->
<ehcache:annotation-driven />
<ehcache:config cache-manager="cacheManager">
<ehcache:evict-expired-elements
interval="60" />
</ehcache:config>
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="osgibundlejar:/META-INF/ehcache/ehcache.xml" />
</bean>
<!-- ehcache config End --> <tx:annotation-driven transaction-manager="txManager" /> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean> <!-- 定时任务开始 -->
<!-- 线程执行器配置,用于任务注册 -->
<bean id="executor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="500" />
</bean> <!-- 业务对象 -->
<bean id="timerTask"
class="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.internal.TimerTask" /> <!-- 调度业务 update by wangtao 20130715 -->
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="timerTask" />
<property name="targetMethod" value="serviceTimerTask" />
</bean> <!-- 测试 -->
<bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<!-- 延迟10秒启动 -->
<property name="startDelay" value="10000" />
<!-- 每隔20秒执行一次 -->
<property name="repeatInterval" value="20000" />
</bean> <!-- 增加调度触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<!-- 每天晚上11点触发 -->
<property name="cronExpression" value="0 0 23 * * ?" />
</bean> <!-- 增加调度触发器 add by wangtao 20130715 -->
<bean id="autoApplyCodeCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<!-- 每天中午12点触发 -->
<property name="cronExpression" value="0 0 12 * * ?" />
</bean> <!-- 设置调度 update by wangtao 20130715 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- <ref bean="cronTrigger" /> -->
<ref bean="cronTrigger" />
</list>
</property>
<property name="taskExecutor" ref="executor" />
</bean>
<!-- 定时任务结束 --> <!-- 引入服务 -->
<!-- 引入文件服务器同步 -->
<osgi:reference id="fileSyncManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.upload.service.IFileSyncManager" />
<!-- 引入系统配置项 -->
<osgi:reference id="sysConfigManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.configuration.service.ISysConfigManager" />
<!-- 引入邮件管理 -->
<osgi:reference id="mailSendManager"
interface="com.mpr.mprsp.mcrc.email.service.IMailSendManager" />
<!-- 引入SqlSessionFactory -->
<osgi:reference id="sqlSessionFactory"
interface="org.apache.ibatis.session.SqlSessionFactory" bean-name="sqlSessionFactory" />
<!-- 引入DataSourceTransactionManager -->
<osgi:reference id="txManager"
interface="org.springframework.jdbc.datasource.DataSourceTransactionManager"
bean-name="txManager" />
<!-- 引入ParametersMapBuilder -->
<osgi:reference id="parametersMapBuilder"
interface="com.isoftstone.agiledev.core.query.mybatis.ParametersMapBuilder"
bean-name="parametersMapBuilder" /> <!-- 暴露服务 -->
<!-- 暴露MPR出版物内容类型 -->
<osgi:service ref="publicationContentTypeManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IPublicationContentTypeManager" />
<!-- 暴露语种管理 -->
<osgi:service ref="languageManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.ILanguageManager" />
<!-- 暴露码段管理 -->
<osgi:service ref="mprCodeSegmentManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IMprCodeSegmentManager" />
<!-- 暴露预警阀值 -->
<osgi:service ref="mprCodeThresholdManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IMprCodeThresholdManager" />
<!-- 暴露MPR前置码生效信息管理 -->
<osgi:service ref="caroperInfoSyncManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.ICaroperInfoSyncManager" />
<!-- 暴露MPR前置码文件管理 -->
<osgi:service ref="mprFileManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IMprFileManager" />
<!-- 暴露撤销记录管理 -->
<osgi:service ref="revocationStatsManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IRevocationStatsManager" />
<!-- 暴露废除记录管理 -->
<osgi:service ref="abolishStatsManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IAbolishStatsManager" />
<!-- 暴露图书业务管理 -->
<osgi:service ref="publicationManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IPublicationManager" />
<!-- 暴露 期刊业务管理 -->
<osgi:service ref="periodicalManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IPeriodicalManager" />
<!-- 暴露报纸业务管理 -->
<osgi:service ref="newsPaperManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.INewsPaperManager" />
<!-- 暴露音像业务管理 -->
<osgi:service ref="audioManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IAudioManager" />
<!-- 暴露(组区)MPR出版物管理 -->
<osgi:service ref="publicationAreaManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IPublicationAreaManager" />
<!-- MPR出版物视图服务类 -->
<osgi:service ref="publicationViewManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IPublicationViewManager" />
<!-- MPR 资源类 -->
<osgi:service ref="mprCodeResourceManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IMprCodeResourceManager" />
<!-- 关联关系管理 -->
<osgi:service ref="isliMprCodeRelationManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IIsliMprCodeRelationManager" /> <!-- option 下拉选框数据 -->
<osgi:service ref="optionManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IOptionManager" /> <osgi:service ref="apiPublicationService"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IApiPublicationService" /> <!-- openservice 暴露前置编码服务接口 -->
<osgi:service ref="openService"
interface="com.mpr.mprsp.mcrc.service.mcrs.precedencecode.service.IOpenService" /> <osgi:reference id="sysLogManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.system.service.ISysLogManager"/> <osgi:reference id="statsMprManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.statistics.service.IStatsMpr" />
<osgi:reference id="statsPublication"
interface="com.mpr.mprsp.mcrc.service.mcrs.statistics.service.IStatsPublication" />
<osgi:reference id="statsPublisher"
interface="com.mpr.mprsp.mcrc.service.mcrs.statistics.service.IStatsPublisher" />
<osgi:reference id="publisherGroupManager"
interface="com.mpr.mprsp.mcrc.service.mcrs.publisher.service.IPublisherGroupManager" />
</beans>
共有两个注解:
  • @Cacheabele      :指定方法使用缓存
  • @TriggersRemove  :从缓存中移除对象
在查询的方法上使用缓存:
    @SuppressWarnings("unchecked")
@Cacheable(cacheName = "publicationsCache")
public List<PublicationViewInfo> query(PublicationViewInfoParams params)
throws Exception
 
在删除或更新的方法上清空缓存:
@Override
@TriggersRemove(cacheName = {"publicationsCache"},
when = When.AFTER_METHOD_INVOCATION,
removeAll = true)
public int hiddenResource(Long resourceId, String publicationType,
Boolean isHidden) throws Exception {

ehcache注解全面解析---打酱油的日子的更多相关文章

  1. SpringMVC注解@RequestParam全面解析---打酱油的日子

    在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取.这里主要 ...

  2. SpringMVC注解@RequestMapping全面解析---打酱油的日子

    @RequestMapping 可以出现在类级别上,也可以出现在方法上.如果出现在类级别上,那请求的 url 为 类级别上的@RequestMapping + 方法级别上的 @RequestMappi ...

  3. ehcache注解全面解析

    通过ehcache以编程方式使用缓存: 跟上面的方式相同,但是缓存通过ehcache去管理,当然比使用map有N多种好处,比如缓存太大了快达到上限之后,将哪一部分缓存清除出去.这种方式完全是通过代码的 ...

  4. Java注解全面解析(转)

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  5. Spring源码情操陶冶-AnnotationConfigBeanDefinitionParser注解配置解析器

    本文承接前文Spring源码情操陶冶-自定义节点的解析,分析spring中的context:annotation-config节点如何被解析 源码概览 对BeanDefinitionParser接口的 ...

  6. Spring的AOP配置文件和注解实例解析

    1.1           Spring的AOP配置文件和注解实例解析 AOP它利用一种称为"横切"的技术,将那些与核心业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减 ...

  7. 【面试加分项】java自己定义注解之解析注解

    我之前的博客中说明过自己定义注解的声明今天我们来看看怎样对我们自己定义的注解进行使用. 1.我们在程序中使用我们的注解. 上一篇中我们自己定义了一个注解: @Target(ElementType.FI ...

  8. @Aspect 注解切面解析

    注解切面解析 注解切面解析器 /** * 注解切面解析器 */ public class BeanFactoryAspectJAdvisorsBuilder { /** * Bean 工厂 */ pr ...

  9. RequestMapping 注解的解析、匹配、注册

    RequestMapping 注解的解析.匹配.注册 1)创建 RequestMappingHandlerMapping 实例时会触发 afterPropertiesSet 调用. 2)读取容器中所有 ...

随机推荐

  1. Linux软件包管理

    Linux软件包管理 Linux软件包管理主要有2类:是二进制包管理.源码包管理 二进制包管理 主要有RPM和YUM两种 RPM包管理 安装 --ivh:-v ,-vv,-vvv显示的安装信息依次详细 ...

  2. json和jsonp

    JSON是一种数据交换格式!   JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议!   一般使用JSON来传数据,靠JSONP来跨域.   JSON的优点: 1.基于纯文本, ...

  3. 数据库阿里连接池 druid配置详解

    http://blog.csdn.net/hj7jay/article/details/51686418 http://lj6684.iteye.com/blog/1770093 http://www ...

  4. web页面跳转的几种方式

    可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...

  5. html_随笔

    1 <h1>  </h> 标题 2 <p> </p> 段落 3 <br /> 换行 4 <!-- ...--> 注释 5 < ...

  6. jQuery cookie使用

    什么是jquery cookie? A simple, lightweight jQuery plugin for reading, writing and deleting cookies. Usa ...

  7. HTTP状态码

    http状态码负责表示客户端HTTP请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. 状态码类别分组如下: 1. 1XX: informational(信息性状态码)  接收的请求正 ...

  8. Linux下GNOME桌面的安装

    yum grouplist //列出yum仓库里的软件组列表 GNOME桌面的安装 yum install soft1 soft2 //使用yum源安装软件 yum groupinstall grou ...

  9. nginx+fastcgi+c/cpp

    参考:http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/ 跟着做了一遍,然后根据记忆写的,不清楚有没错漏步骤,希望多多评论多多 ...

  10. 编译安装nginx

    一.安装工具yum -y install zlib zlib-devel openssl openssl-devel pcre-devel cc-c++ autoconf automakeyum -y ...