通过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. OC与c混编实现Java的String的hashcode()函数

    首先,我不愿意大家需要用到这篇文章里的代码,因为基本上你就是被坑了. 起因:我被Java后台人员坑了一把,他们要对请求的参数增加一个额外的字段,字段的用途是来校验其余的参数是否再传递过程中被篡改或因为 ...

  2. java基础 布局管理器

    概念: 组建在容器(比如JFrame)中的位置和 大小 是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组建的布局管理. 种类: java共提供了物种布局管理器:流式布局管理 ...

  3. Webstorm 2016.3激活码

    webstorm 2016.3 可用激活码, 使用activation code方式激活 就这么任性,就这么长 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKI ...

  4. 如何做出透明背景的flash动画

    最近碰到了一个问题,做动画时怎么设置透明背景,字是白色的,网上搜了一下,发现可以这样做 在插入的flash代码中加入这一行代码就可以实现了 <param name="wmode&quo ...

  5. 功能实现:PLC对LPC的音量控制

    设计方案1: 在PLC上,当使用QDial调节音量时,触发QDial的SIGNAL:ValueChange(),对应SLOT向LPC发送自定义键码0x22; 在LPC上,当接收到0x22键码时,执行操 ...

  6. Mac 编写oracle 连接脚本

    首先需要本地存有sqlplus命令, 如果没有则需要到官网下载 也可点击我进行下载 (解压 readme.txt 有安装配置说明): 在Oracle官网下载instant client for os ...

  7. 如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用

    1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; ;i<arguments.length;i++){ v ...

  8. tp5 model 的数据自动完成

    auto属性自动完成包含新增和更新操作 namespace app\index\model; use think\Model; class User extends Model { protected ...

  9. j嵌入式f_os之定时管理

    /* * jf_timer.h * * Created on: Aug 20, 2016 * Author: lort */ #ifndef JF_OS_JF_TIMER_H_ #define JF_ ...

  10. OE学习笔记流水

    Terrain.cpp中的getWorldCoordsUnderMouse函数,进行标记.