如何通过Spring框架实现JDBC事务控制?【外链图片传输失败,源站可能有防盗链接机制,建议保存图片直接上传(img-P6EkyKAL-1600675538236)(https://imgkr.cn-bj.ufileos.c...]SpringJDBC事务控制的方式是通过xml配置实现的,案例是通过注解实现的。xml事务配置语句1).修改xml命名空间xmlns:tx="http://www.springframework.org/schema/tx"http://www.springframework.org/schema/tx".springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd2).aopproxy3).配置事务管理器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)必须在不存在的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)@Transactional(propagation=Propagation.SUPPORTS)如果其他bean调用此方法并在其他bean中声明事务,那么就用事务吧。如果其他bean不声明事务,则不要使用事务。5).配置aop(pointcut,notification)Spring事务管理注解方法1).配置事务管理器2).配置注解支持3).服务方法为需要添加的方法添加事务注解@Override@Transactional(propagation=Propagation.REQUIRED)publicvoidsaveUser(StringuserName,StringuserPwd){Useruser1=newUser();user1.setUserName(用户名);用户1.setUserPwd(用户密码);userDao.saveUser(user1);userDao.delUserById(2);}备注:默认的spring事务只有在出现未捕获的运行时异常时才会回滚。springaop异常捕获的原理:拦截的方法需要显示方法抛出异常,不做任何处理,让aop代理捕获方法的异常并回滚。默认情况下,aop只捕获runtimeexception异常,但可以配置为捕获特定异常并回滚。也就是说,不要在service方法中使用trycatch或者在catch的最后加上thrownewRunTimeexcetpion(),这样当程序出现异常时,可以被aop捕获并回滚。扩展事务的四大特性(即:ACID)原子性(Atomicity):业务控制的最小单位,并发控制的最小单位,[不可分割]一致性(Consistency):事务执行前后,数据在数据库中必须保持一致的状态。(比如转账过程中,账户操作后数据必须保持一致)---->保证数据的完整性(正确性)。隔离性:事务的执行应该相互隔离,互不影响。(多个角色必须保证统一记录的操作互不干扰)。当然,没有影响是不可能的。为了尽量减少影响级别,它受到隔离级别的限制:READ_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READSERIALIZABLE事务之间的执行应该相互隔离,相互独立。(多个角色必须保证不干扰统一记录)。当然,没有影响是不可能的。为了将影响级别降到最低,通过隔离级别限制:READ_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READSERIALIZABLE持久性(Durability):事务提交后,对数据库中数据的更改是永久性的。