`
futurep_p
  • 浏览: 66118 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用spring拦截完成批量任务锁

阅读更多

    利用数据库小表完成大批量数据的锁定目的,即批量任务锁。目的是为了保证操作特定任务的排他性,是一种相对乐观锁,因为它操作的不是处理数据本身,而是独立于这些数据之外,在另一张数据库表描述了操作数据的摘要,也就是关键字。


    打个比方,比如现在桌上放着厚厚的20叠百元大钞(这些钱给我就爽了),现在有2个会计要对这些钞票清点,因为考虑到两个会计的点钞速度有区别,当又要达到相对相等的时间完成,他们先对20叠钞票分成20小份,并对
每份做了一次1到20的编号。现在针对点钞这个动作我们就可以用到了批量任务锁,那么锁的关键字就是【动作】+【编号】,如点钞1,点钞2等。这里点钞1和点钞2是不存在排他性要求的,关键是点钞1内部,如果会计A对
1编号钞票进行清点的时候,会计B就不能在对1编号进行操作了。这里如果用传统的悲观锁,即对没张钞票进行排他控制,效率会大大折扣。


    针对上面的例子,我们可以得出两个实体,一个动作。实体2:钞票,实体2:清点任务锁;动作:清点。下面是针对三者的类图。

 类图

 

其中addLock方法可以是通过抛出异常或是返回结果的方式来判断是否加锁成功就随你了。下面是操作的流程图。

 流程图

    这样就完成最基本的任务锁控制目的。下面我们再来看看,是不是还可以做更好的优化,答案是肯定的,我们可以spring的自动代理拦截来把锁的处理隐蔽起来,也就是不要让清点任务来关心锁控制的具体操作,我们需要关心的只有这个任务我是要加这么个锁就行了,而加锁删锁操作就有拦截器来操作,这样就让点钞任务解放出来了,并且跟远的意义也是把锁解放出来,使它的功能不仅仅局限在点钞任务上。这样达到双赢,社会更加和谐。
    那么我们现在来定义一个锁申明:TaskLockAnnotation,包含三个属性:任务类型、锁键值、是否抛出异常。为了达到拦截效果,我们当然还需要定义一个拦截器了,如果只需要完成简单锁要求,里面的实现也很简单,无非
是在目标方法调用前加锁,在调用后删除锁。如果加锁不成功则不执行任务。

  • 大小: 22.2 KB
  • 大小: 9.1 KB
分享到:
评论

相关推荐

    spring in action 中文版6-11.zip

    2. **AOP(面向切面编程)**:Spring提供了强大的AOP支持,允许开发者定义方法拦截器和切点,用于实现如日志记录、事务管理等横切关注点。AOP的核心概念包括切面、通知、连接点、切点、代理等。 3. **数据访问集成*...

    spring源码spring-framework-4.3.2.RELEASE

    通过对Spring 4.3.2.RELEASE源码的深入研究,我们可以了解其设计理念,学习到如何优雅地管理依赖、实现面向切面编程,以及如何利用Spring构建高效、健壮的Web应用。同时,源码阅读也能帮助我们理解Spring如何与其他...

    spring in action(英文版).pdf

    《Spring in Action》是关于Spring框架的一本权威指南,它深入浅出地介绍了Spring的核心概念和技术,对于理解和应用Spring框架...通过学习这本书,开发者可以掌握如何利用Spring框架高效地开发高质量的Java应用程序。

    Spring的全部架包和帮助文档!

    6. **Spring Batch**:这是一个用于处理批量处理任务的强大框架,支持读取大量数据、处理和写入结果,以及错误处理和重试机制。 7. **Spring Security**:原名为Acegi Security,提供认证、授权和安全控制,保护Web...

    spring3核心包及第三方插件包

    在《Spring3.x企业级应用开发》一书中,作者深入浅出地介绍了如何利用Spring3构建高效、可维护的软件系统。这里提到的"spring3核心包及第三方插件包"是该书实践部分所需的基础组件,包含了Spring框架的基本模块以及...

    简单Spring 实例(自己写的)

    5. **Spring Batch**:针对批量处理任务的模块,提供了易用、可扩展且高度模块化的批处理框架。 6. **Spring Integration**:用于企业集成模式,如消息传递、文件处理等。 【Spring 实例——helloSpring】 在...

    spring-framework-5.0.4.RELEASE-dist.zip

    4. 利用Spring AOP实现日志记录、事务管理等通用功能。 5. 结合Spring Cloud构建微服务架构,实现服务注册、发现和负载均衡。 六、学习资源与工具 1. 官方文档:提供详尽的API参考和使用指南。 2. Spring ...

    spring-study - 副本.rar

    6. **Spring Batch**:专门用于处理批量数据操作,包括读取、处理和写入大量数据,适用于ETL(抽取、转换、加载)任务。 7. **Spring Integration**:提供轻量级企业服务总线(ESB)功能,通过消息驱动架构连接不同...

    spring batch 2.1.8版本

    ### Spring Batch 2.1.8 版本详解 #### 一、Spring Batch 简介 ##### 1.1 背景介绍 Spring Batch 是一个...通过深入理解其架构、新特性以及配置方法,开发者能够更好地利用该框架来构建可靠、高效的批量处理应用。

    Spring中文帮助文档

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器(ViewResolver) 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. ...

    Spring API

    2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1....

    Spring Batch 文档

    Spring Batch最初由Lucas Ward、Dave Syer等开发者于2005年创建,旨在解决企业级应用中批量数据处理的复杂性和挑战性。随着Java平台的不断演进,Spring Batch也持续更新,以适应新的技术趋势和性能需求。 #### 1.2 ...

    spring-framework-reference3.0.7

    这份文档是开发者深入理解并有效利用Spring进行开发的重要资源,它涵盖了从基本概念到高级特性的全方位讲解。 1. **Spring框架概述**:Spring是一个开源的应用框架,它的核心设计目标是简化Java企业级应用的开发。...

    spring-lib

    学习和理解这些模块的功能和用法,能够帮助开发者更有效地利用Spring框架进行开发。在实际项目中,开发者还需要结合Spring的其他组件,如Spring Boot、Spring Data、Spring Security等,以构建出完整、健壮的应用...

    Spring的批处理框架

    Spring Batch 2.0版本开始支持Java 5标准,这使得开发者能够利用Java 5中的新特性,如泛型等,来简化代码编写。 **2.2 Chunk导向处理** **2.2.1 ItemProcessor** ItemProcessor是Spring Batch中处理数据的一个...

    Spring.3.x企业应用开发实战.pdf

    《Spring 3.x企业应用开发实战》是一本深入讲解Spring框架在企业级应用中的实践指南。这本书主要针对Spring 3.x...通过学习,读者不仅可以提升技能,还能了解到如何在实际项目中有效利用Spring提升开发效率和应用质量。

    Spring 经典语录

    以上知识点构成了Spring框架的主要组成部分,通过理解和掌握这些,开发者能更好地利用Spring进行企业级Java应用开发。无论你是初学者还是资深开发者,深入研究Spring的经典语录都能帮助你提升技能,打造更加健壮和...

    Spring核心知识点完整梳理(史上最全,值得收藏)

    Spring框架是Java开发中最常用的轻量级框架之一,它以其依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented ...通过学习这些知识点,开发者可以更好地利用Spring进行高效、稳定的Java应用开发。

    spring batch Doc

    通过上述介绍,我们可以看到Spring Batch 为开发者提供了一套强大且灵活的工具,帮助他们在处理大量数据时能够更加高效、可靠地完成任务。无论是从基础的配置到高级的异常处理,Spring Batch 都考虑到了各种可能的...

    spring开发指南

    9. **Spring Batch**:专为批量处理任务设计,提供了事务管理、错误处理和重试机制等功能。 在学习 Spring 开发指南时,会逐步了解如何配置 Spring 容器、声明 Bean、使用注解进行 DI、实现 AOP 切面、集成数据库、...

Global site tag (gtag.js) - Google Analytics