程序是香港云服务器否支持事务的先决条件是数据库,比如使用MySQL的话,如果选择的是innodb,那么支持事务,如果选择的是myisam,那么从根上就不支持事务了
MySQL怎么保证原子性?

如果要保证原子性,就需要在发生异常时,对已经执行的操作进行回滚,在MySQL中,恢复机制是通过回滚日志实现的,所有事务进行的修改,都会先记录到这个回滚日志中,然后再执行相关的操作。
如果在执行过程中遇到异常,我们直接利用回滚日志中的信息将数据回滚到修改之前的样子即可,并且回滚日志会先将数据持久化到磁盘上,这样就可以保证即便在遇到数据库突然宕机,当用户再次重启数据库时,数据库还是站群服务器能够通过查回滚日志来回滚之前未完成的事务。
通过TransactionTemplate或者TransactionManager手动管理事务,在实际应用中却很少使用,下面通过代码来演示,使用TransactionTemplate进行编程式事务管理
复制@Autowired private TransactionTemplate transactionTemplate; public void testTransactionTemplate() { transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(final TransactionStatus transactionStatus) { try { //TODO 业务代码 } catch (final Exception e) { // 异常时回滚 transactionStatus.setRollbackOnly(); } } }); }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.使用TransactionManager进行编程式事务管理
复制@Resource private PlatformTransactionManager transactionManager; public void testTransactionManager() { final TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //TODO 业务代码 transactionManager.commit(status); } catch (final Exception e) { // 异常时回滚 transactionManager.rollback(status); } }1.2.3.4.5.6.7.8.9.10.11.12.13.声明式事务管理,实际上是通过AOP实现,基于@Transactional的注解使用最多
复制@Transactional public void testTransactional() { userInfoDao.save(userInfo); userInfoDetailDao.save(userInfoDetail); }1.2.3.4.5.在实际的业务开发中,大家一般使用@Transactional注解来开启事务,但很多人并不是很清楚这个注解中的参数是什么意思?有什么用?
@Transactional注解源码如下,里面包含了基本事务属性的配置:
复制package org.springframework.transaction.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Transactional { String value() default ""; Propagation propagation() default Propagation.REQUIRED; Isolation isolation() default Isolation.DEFAULT; int timeout() default -1; boolean readOnly() default false; Class<? extends Throwable>[] rollbackFor() default {}; String[] rollbackForClassName() default {}; Class<? extends Throwable>[] noRollbackFor() default {}; String[] noRollbackForClassName() default {};}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.@Transactional 的常用参数介绍
属性名
说明
propagation
事务的传播行为,默认值为 REQUIRED
isolation
事务的隔离级别,云南idc服务商默认值采用 DEFAULT
timeout
事务的超时时间,默认值为-1(不会超时),如果超过该时间限制但事务还没有完成,则自动回滚事务
readOnly
指定事务是否为只读事务,默认值为 false
rollbackFor
用于指定能够触发事务回滚的异常类型,并且可以指定多个异常类型
关于传播行为propagation属性:
REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。相关文章:
相关推荐:
服务器租用源码下载源码库IT技术网亿华云IT资讯网益华科技香港云服务器企商汇云智核汇智坊益强前沿资讯极客编程益华科技益强编程舍益强科技云站无忧码上建站智能时代IT资讯网益强智未来亿华云益强编程堂码力社亿华云计算益强资讯优选益华科技技术快报亿华智慧云亿华互联益强智囊团运维纵横益华IT技术论坛益强IT技术网多维IT资讯极客码头全栈开发益强数据堂益强科技思维库编程之道亿华科技亿华智造
0.12s , 11693.015625 kb
Copyright © 2025 Powered by SpringBoot注解@Transactional详解以及事务失效,亿华互联 滇ICP备2023000592号-16