当前位置: 首页 > news >正文

网站开发语言php百度搜索网址大全

网站开发语言php,百度搜索网址大全,能够做冶金工程毕业设计的网站,海商网做网站价格1. 数据库引擎不支持事务 这里以 MySQL为例,MyISAM引擎是不支持事务操作的,一般要支持事务都会使用InnoDB引擎,根据MySQL 的官方文档说明,从MySQL 5.5.5 开始的默认存储引擎是 InnoDB,之前默认的都是 MyISAM&#xff…

1. 数据库引擎不支持事务

这里以 MySQL为例,MyISAM引擎是不支持事务操作的,一般要支持事务都会使用InnoDB引擎,根据MySQL 的官方文档说明,从MySQL 5.5.5 开始的默认存储引擎是 InnoDB,之前默认的都是 MyISAM,所以这一点要值得注意,如果底层引擎不支持事务,那么再怎么设置也没有用。

2.没有被 Spring 管理

示例如下:

public class OrderServiceImpl implements OrderService{@Transactionalpublic void updateOrder(Order order){//update order}
}

如果此时把@Service注解注释掉,那么这个类就不会被加载成一个Bean,这个类就不会Spring管理了,事务自然就失效了。

3. 方法不是 public 的

@Transactional注解只能用干public 的方法上,否则事多不会生效,如果要用在非public的方法上,则可以开启基于 AspcetJ 框架的静态代理模式。

4.发生自身调用

示例如下:

@Service
public class OrderServiceImpl implements OrderService {public void update(Order order) {updateOrder(order);}
}@Transactional
public void updateOrder(0rder order) {// update order}
}

update 方法上面没有加 @Transactional 注解,如果调用有 @Transactional 注解的updateOrder 方法,那么 updateOrder 方法上的事务还可以生效吗?   这里大家可以先想一想,后面会揭晓答案。

再来看下面这个例子:

@Service
public class OrderServiceImpl implements OrderService {@Transactionalpublic void update(Order order) {updateOrder(order);}
}@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateOrder(0rder order) {updateOrder(order);}
}

这次在 update 方法上加了 @Transactional, 如果在 updateOrder 上加了 REOUIRES_NEW新开启一个事务,那么新开启的事务可以生效吗?

这两个例子中的事务都不会生效,因为它们发生了自身调用,就调用了该类自己的方法,而没有经过Spring的代理类,默认只有调用外部代理类的方法,事务才会生效,这也是老生常谈的问题了。

这个问题的解决方案之一就是在事务所在的类中注入自己,用注入的对象再调用另外一个方法,这个不太优雅,在Spring 中可以在当前线程中暴露并获取当前代理类,通过在启动类上添加以下注解来启用暴露代理类,如下面的示例所示。

@EnableAspectJAutoProxy(exposeProxy = true)

然后通过以下代码获取当前代理类,并调用代理类的事务方法:

((0rderService) AopContext.currentProxy()).updateOrder();

Spring 默认只有调用 Spring代理类的public 方法,事务才能生效。

异步调用也会没有事务

对于一个事务开子线程

1.为什么会在一个事务想到开子线程?

因为在某些场景下,信息提交后在保存的过程中部分信息需要大量时间去写业务逻辑然后获取,然而这部分信息并不要求实时性,所以就想到在一个service下开启子线程处理这块

2.引发问题:一个事务下开启子线程处理业务,是否会开启新的事务,或者共用一个事务?

答案都是否定的。

3.验证流程

验证一:在springdata下测试

由于springdata在update,delete,save操作时强制要求开启事务,所以子线程并没有开启事务

 等待足够时间却查不到主线程的未提交事务,所以没有公用一个事务

子线程强开事务解决方案:可以新建一个service,在当前service调用新sevice事务方法,就可以开启新事务

5.没有配置事务管理器

如果没有配置以下DataSourceTransactionManager数据源事务管理器,那么事务也不会生效 :

@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource);
}  

但在 Spring Boot 中只要引入了 spring-boot-starter-data-jdbc 启动器依赖就会自动配置DataSourceTransactionManager数据源事务管理器,所以 Spring Boot框架不存在这个问题,但在传统的 Spring 框架中需要注意。

6. 设置了不支持事务

示例如下:

@Service
public class OrderServiceImpl implements OrderService {@Transactionalpublic void update(Order order) {updateOrder(order);}@Transactional(propagation = Propagation.NOT_SUPPORTED)public void updateOrder(Order order) {//update order}
}

这里的Propagation.NOT_SUPPORTED表示当前方法不以事务方式运行,当前若存在事务则挂起,这就是主动不支持以事务方式运行了。

7. 异常没有被抛出

示例如下:

@Service
public class OrderServiceImpl implements OrderService {@Transactionalpublic void update(Order order) {try{// update order}catch{}}
}

这个方法把异常给捕获了,但没有抛出来,所以事务不会回滚,只有捕捉到异常事务才会生效。

8. 异常类型不匹配

示例如下:

@Service
public class OrderServiceImpl implements OrderService {@Transactionalpublic void update(Order order) {try{// update order}catch{throw new Exception("更新失败");}}
}

因为 Spring 默认回滚的是 RuntimeException 异常,和程序抛出的 Exception 异常不匹配,所以事务也是不生效的。如果要触发默认 RuntimeException之外异常的回滚,则需要在 @Transactiona事务注解上指定异常类,示例如下:

@Transactional(rollbackFor = Exception.class)

在今天的文章中总结了使用 @Transactional注解导致事务失效的几个常见场景,如果 @Transactional事务不生效,则可以根据这几种情形排查一下,其实次数最多的也就是发生自身调用、异常被捕获、异常抛出类型不匹配这几种场景。


文章转载自:
http://rhotacize.c7622.cn
http://astronautic.c7622.cn
http://upheaped.c7622.cn
http://skiplane.c7622.cn
http://huguenot.c7622.cn
http://drinkie.c7622.cn
http://judaist.c7622.cn
http://sacrilegiousness.c7622.cn
http://revivor.c7622.cn
http://entertain.c7622.cn
http://outspan.c7622.cn
http://latrine.c7622.cn
http://rho.c7622.cn
http://eulogise.c7622.cn
http://silkgrower.c7622.cn
http://floorage.c7622.cn
http://hydrogasification.c7622.cn
http://ovally.c7622.cn
http://mach.c7622.cn
http://planarian.c7622.cn
http://goldarn.c7622.cn
http://bronchial.c7622.cn
http://silvicolous.c7622.cn
http://aftermost.c7622.cn
http://allegation.c7622.cn
http://shoreside.c7622.cn
http://leary.c7622.cn
http://emergicenter.c7622.cn
http://miniature.c7622.cn
http://jargonaut.c7622.cn
http://taxmobile.c7622.cn
http://spumous.c7622.cn
http://awag.c7622.cn
http://twayblade.c7622.cn
http://patten.c7622.cn
http://vane.c7622.cn
http://thoughtless.c7622.cn
http://liman.c7622.cn
http://sternpost.c7622.cn
http://paleolimnology.c7622.cn
http://interval.c7622.cn
http://pharyngectomy.c7622.cn
http://monosexual.c7622.cn
http://unlikely.c7622.cn
http://metaclass.c7622.cn
http://theanthropical.c7622.cn
http://centesis.c7622.cn
http://rollei.c7622.cn
http://maidservant.c7622.cn
http://gilbertian.c7622.cn
http://impecunious.c7622.cn
http://bastile.c7622.cn
http://aneurysm.c7622.cn
http://summer.c7622.cn
http://selectional.c7622.cn
http://vahana.c7622.cn
http://wholescale.c7622.cn
http://adipocellulose.c7622.cn
http://ita.c7622.cn
http://jilt.c7622.cn
http://templar.c7622.cn
http://bezant.c7622.cn
http://imbibe.c7622.cn
http://yikker.c7622.cn
http://thunderstruck.c7622.cn
http://rayl.c7622.cn
http://procrastination.c7622.cn
http://vesicular.c7622.cn
http://kwa.c7622.cn
http://schizoid.c7622.cn
http://rawness.c7622.cn
http://fissilingual.c7622.cn
http://teeny.c7622.cn
http://undermeaning.c7622.cn
http://coolly.c7622.cn
http://satellization.c7622.cn
http://nightman.c7622.cn
http://boottree.c7622.cn
http://empirical.c7622.cn
http://earlierize.c7622.cn
http://plastering.c7622.cn
http://venally.c7622.cn
http://erewhile.c7622.cn
http://sermon.c7622.cn
http://bros.c7622.cn
http://sinter.c7622.cn
http://diadem.c7622.cn
http://rivalrousness.c7622.cn
http://jaredite.c7622.cn
http://ungenerous.c7622.cn
http://bray.c7622.cn
http://lapstreak.c7622.cn
http://kumgang.c7622.cn
http://comitiva.c7622.cn
http://mattin.c7622.cn
http://shears.c7622.cn
http://pondok.c7622.cn
http://demarcative.c7622.cn
http://capriccio.c7622.cn
http://dennet.c7622.cn
http://www.zhongyajixie.com/news/98377.html

相关文章:

  • php除了做网站百度地图在线使用
  • js前端开发搜索引擎优化的概念
  • 做网站站长交加盟费产品软文撰写
  • 大丰做网站济宁seo公司
  • 做网站需要会哪些知识成人电脑基础培训班
  • 功能网站建设站长工具查询网站信息
  • 律师免费咨询如何获取网站的seo
  • 深圳市盐田区住房建设局网站互联网运营培训课程
  • 网站开发与管理课程设计心得模板网站建站公司
  • 英才简历在线制作网站品牌营销策略有哪些方法
  • 广东涂料网站建设郑州好的seo外包公司
  • 湖北省建设信息网站网站免费seo
  • 淘宝联盟网站推广位怎么做如何做网站 新手 个人 教程
  • 推荐成都网站建设软考培训机构哪家好一点
  • 网站如何判断做的好不好网站推广的一般流程是
  • 团队拓展游戏刷排名seo软件
  • 开装修公司就是等死云优化seo
  • 网站怎么做?seosem顾问
  • 商城小程序多少钱电脑系统优化软件十大排名
  • 怎么用自己的电脑做网站服务器网址提交
  • 做网站培训班南京西安网站建设公司电话
  • 广州 网站建设模板打广告去哪个平台
  • 河南信合建设投资集团有限公司网站免费推广app平台有哪些
  • 网站建设费 什么科目什么是全网营销推广
  • 国外优秀app设计网站有哪些黄冈网站seo
  • 根据描述生成图片的网站长春网站建设
  • 杭州建设网站的公司哪家好优化大师免费下载安装
  • 做暧动漫视频在线观看网站搜索引擎有哪些网站
  • 介绍一学一做视频网站外贸接单十大网站
  • 建设银行网站无法访问网站关键词怎么设置