当前位置: 首页 > 后端技术 > Python

知识分享:如何通过Spring框架做JDBC事务控制?

时间:2023-03-25 19:35:47 Python

Spring的JDBC事务控制的方式是通过注解的xml配置来实现案例实践xml事务配置语句1)。修改xml命名空间xmlns:tx="http://www.springframework.org/schema/tx"http://www.springframework.or...http://www.springframework.or...2)。aop代理3)。配置事物管理器4).配置交易相关的通知。一般来说,增删改查方法propagation=Required,查询方法使用read-only="true"。示例如下:交易传播行为介绍@Transactional(propagation=Propagation.REQUIRED)如果有交易,则加入交易,如果没有,则新建一个(默认)@Transactional(propagation=Propagation.NOT_SUPPORTED)容器没有为这个方法开启事务@Transactional(propagation=Propagation.REQUIRES_NEW)无论是否存在事务,创建一个新的事务,原来的暂停,新的执行完成,继续执行旧的事务@Transactional(propagation=Propagation.MANDATORY)必须在一个已经存在的事务中执行,否则会抛出异常@Transactional(propagation=Propagation.NEVER)must必须在不存在的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)@Transactional(propagation=Propagation.SUPPORTS)如果其他bean调用此方法并在其他bean中声明事务,则使用事务。如果其他bean没有声明事务,那么就不需要事务。5).配置aop(pointcut,notification)Spring事务管理注解方法1).Configuration事务管理器2)。配置注解支持3)。需要添加服务方法在事务方法中添加事务注解@Override@Transactional(propagation=Propagation.REQUIRED)publicvoidsaveUser(StringuserName,StringuserPwd){Useruser1=newUser();user1.setUserName(用户名);user1.setUserPwd(userPwd);用户道。保存用户(用户1);用户大o.delUserById(2);}备注:默认spring事务回滚springaop异常捕获原理只有在发生未捕获的runtimeexcetpion时:被拦截的方法需要显式抛出异常,无法以任何方式处理,所以aop的proxy只能捕获方法的异常并回滚。默认情况下,aop只捕获运行时异常,但可以配置为捕获特定异常并回滚。也就是说,不要在服务方法中使用trycatch或者catch在最后添加thrownewRunTimeexcetpion(),这样当程序出现异常时,可以被aop捕获并回滚。扩展事务的四大特性(即:ACID)原子性(Atomicity):业务控制的最小单位,并发控制的最小单位,【不可分割】一致性:一个事务执行前后,数据库中的数据必须维护一致的状态。(比如转账过程中,账户操作后数据必须保持一致)---->保证数据的完整性(正确性)。隔离性:事务的执行应该相互隔离,互不影响。(多个角色必须保证不干扰统一记录)。当然,没有影响是不可能的。为了将影响级别降到最低,通过隔离级别限制:READ_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READSERIALIZABLE持久性(Durability):事务提交后,对数据库中数据的更改是永久性的。