梁恒
骑士
骑士
  • UID232
  • 粉丝0
  • 关注0
  • 发帖数23
阅读:5168回复:0

数据库操作事务管理

楼主#
更多 发布于:2019-03-25 21:17
什么事务?简单的可以理解为对数据库的操作。
在核格平台中,获取session的方式主要为
DBSession
session = DataBaseUtil.getHibernateSession();
而开始事务开启的方式为
session.beginTransaction();
通常开启的事务需要使用try{}catch{}包裹事务的处理。那么什么情况下需要开启事务呢?首先理解一下事务开启的原因,对数据库的数据进行批量或连表操作时,为了保证数据的一致性和正确性,我们需要添加事务管理机制进行管理。当对数据库的数据进行操作失败时,事务管理可以很好保证所有的数据回滚到原来的数据,如果操作成功,则保证所有需要更新的数据持久化。简单的理解可以是要不全部成功,要不全部不成功举个例子:
1、 update ts_employee set state = 1 where id = “zdc”
2、 insert ts_user (id,accout,password) value (“10001”,”zdc”,” 33814ACC0B1”);
当我们进行用户注册入网的时候,需要执行上面的两条SQL语句,但是如果当我们刚执行完第一条语句就宕机了,第二条语句没执行,那么用户信息表里面看到账号是注册成功了,但是用户表却没有账号,导致系统数据错乱,这时候就需要用到我们的事务了。
事务流程:
1、 session.beginTransaction();开启事务;
2、 进行数据执行操作insert/update/delete;
3、 关闭事务;
A.      如果数据执行同步commit成功,则数据一致入库;
B.      如果commit失败, catch捕捉异常,执行事务回滚rollback,保证数据的一致性。
从上面的例子可以看出,如果没有启用事务,将容易导致数据的不一致,从而可能导致系统数据的错乱。从网上扒的图,

图片:1.png


从图中可以看到,对数据库的操作有两种,第一种是单独数据的同步,即单独SQL的操作的时候可以不用申请事务直接执行SQL操作;但是当多SQL操作的时候就不能这么做了,为了保证全部数据的一致性,需要开启事务,将所有的增删改操作先写到临时表,再一起执行commit提交SQL操作,数据同步入库。
对于原生jdbc的操作中,PreparedStatement和Statement都可以对对象进行处理,如果是只执行一次存取操作,使用Statement,PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处;如果是执行批量处理,请使用PreparedStatement,PreparedStatement可以大大提高效率. 可以理解为JDBC存储过程。还有一个需要注意的地方,申请的PreparedStatement结果集也需要关闭,先关闭结果集再关闭连接。
再说说连接池。所有的数据库连接文件都在 ..\WEB-INF\classes\META-INF\persistence.xml下

图片:2.png


其中有个参数maxActive,代表的是这个数据库在系统运行过程中运行的最大同时产生的激活连接数,在生成环境中,一般单机节点maxActive设置成可能的并发量就行了,还有一个参数maxWait,最大建立连接等待时间,在某个时间节点高并发的时候这个参数较为重要,设置等待时间可以排队处理,如果超过等待时间则会报连接异常。
我们公司平台的数据库连接池管理框架使用的是Alibaba的Druid Monitor管理页面地址为http://IP:端口号/项目名称/druid/index.html,在.. /datasource.html中可以看到jboss运行时操作的数据库连接使用情况

图片:3.png


如图中的,逻辑连接打开次数的次数应该要等于逻辑连接关闭次数,这样系统的的session使用才是正常的状态

图片:4.png


如图,逻辑连接打开次数的次数没有等于逻辑连接关闭次数,且连接等待次数多,等待时间长,同时在系统中的活跃连接数大,说明系统中的连接没正常释放,需要检查代码,将开启的事务在使用完了之后进行释放关闭。特别要注意的是,在关闭事务的时候要检查前后关系类,如果方法出现嵌套,同一个线程内就不是同一个连接了,就不在一个事务里面了,这会导致后面的类报异常无法继续执行,出现事务不一致的情况,应该在最后事件的结束类再进行事务的关闭和释放。

图片:5.png


最后再注意的一点,在平台中,没有使用session.beginTransaction();开启事务则不需要手动关闭,平台会自动回收连接。

最新喜欢:

余航余航
游客

返回顶部