简单事务的封装_计算机软件及应用_IT计算机_专业资料

简单事务的封装_计算机软件及应用_IT计算机_专业资料

ID:41574922

大小:47.10 KB

页数:18页

时间:2019-08-28

简单事务的封装_计算机软件及应用_IT计算机_专业资料_第1页
简单事务的封装_计算机软件及应用_IT计算机_专业资料_第2页
简单事务的封装_计算机软件及应用_IT计算机_专业资料_第3页
简单事务的封装_计算机软件及应用_IT计算机_专业资料_第4页
简单事务的封装_计算机软件及应用_IT计算机_专业资料_第5页
资源描述:

《简单事务的封装_计算机软件及应用_IT计算机_专业资料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、数据库事务的简单封装实现上而一直在说数据源跟事务之间的关系,可是在写上而的东西的时候大脑中对这些东西只是有一个模糊的概念,没法形成体系,更没法继续描述清楚。所以就把这件事情暂时放下了,写了儿天的算法。但是内心还是感觉有些东西需要完成。最近还是准备继续写下去。在这里我决定重新整理一下思路。爭务是我们最开始在接触数据库的时候学到的,在这里我们可以得出一个大胆的结论,那就是事务要由数据库来实现,那么我们在程序中是没有数据库这个概念的,我们的操作是通过数据源的操作來实现的,所以在程序小,事务是和数据源绑定在一起的。我们的事务的保证要依赖于具体的数据源。那么spring耍实现事务也耍依赖于具体的

2、数据源,所以这里spring最终能提供什么样的事务要看具体的数据库和具体的数据源。Spring在具体的操作的时候提供了很多不同的事务管理器,这些不同的事务管理器对应操作不同的数据源类型。单个数据库的时候,我们使用jdbc的事务管理器是我们很常见的一种方式。具体的代码设计如下:Class・forNani0(“com.mysq1・jdbc.Driver")・newlnstance();Connectionconn二DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test-01?user=root&password=12345

3、6");conn・setAutoCommit(false);Statementstmt=conn.createStaternent();ResultSetrs=stmt.executeQuery("select*fromuser");while(rs.next()){System.out.printin(rs・getString(l));}conn.commit();大体的流程如上,首先将白动提交设为false,这样我们就可以手动提交了,否则手动提交时会抛异常的。Z后去执行具体的操作,操作完成后手动提交业务。当然这里耍捕捉异常的,一旦出现异常,就应该执行rollback。Spring的

4、事务管理器也不会超岀我们上面的过程,这里我们先讨论非分布式的事务。先从我们的使用上分析,看一下我们service^11dao层的代码,会发现我们这里是没有开启事务,也就是将自动提交设为false的代码,没有最后的commit过程或者rollback的过程。从这一点上來说如果让我们自己封装的话我相信大家也会想到用动态代理來实现的,那么spring就可以采用aop來实现了。我们这里大体猜测-•下过程就可以有一下几个beanobeforeMethod的实现类,完成事务中开启的工作,执行conn.setAutoCommit(false)afterMethod执行事务的提交工作。这里还有一个问题

5、,出现异常怎么办,谁捕捉异常,这里没有其他的类可以捕捉异常了,只剩下一个代理类了,所以在代理类屮需要将这个界常捕捉并执行回滚的操作。那么我们的代理类的执行就会变成以下的过程。beforeMethod//开启事务try{method.invoke()//具体的实现的业务,也就是我们dao或者service中的代码}catch(Exceptione){Conn.rollback}afterMethod//提交事务根据我们的分析,可以设计出上面的框架,我们的上面的代码设计有没有问题。在单个业务,也就是只执行一次的方法里I佰是没有问题的,那么在什么情况下会有问题呢。假设我们的业务代码拥有两个过

6、程,分別为新建一个用八,在message表中插入一个记录,这是两个业务,但是要求这两个业务具有原了性。我们上面的方式就出问题了,写到这里我想自己写一下,好像能说的清楚一些,在写这个之前我们需要获取数据源,顺便写一个简单的数据源的封装工具。这样我们就可以把整个过程说的清楚一些,顺便能熟悉一下数据源的实现的大体流程。简单封装的数据库连接池的工具如publicclassDBPoolUtil{staticstaticstaticstaticstaticstaticstaticstaticstaticstaticstaticstaticstaticprivateprivateprivatepri

7、vateprivateprivateprivateprivateprivateprivateprivateprivateprivate最新的值privatestaticLinkedListpooL=newLinkedList<>();LockLock=newReentrantLock();ConditionnotEmpty=Lock・newCondition();ConditiontimelntervaL=Lock・ne

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。