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

网站建设公司及网络安全法如何自己做搜索网站

网站建设公司及网络安全法,如何自己做搜索网站,做seo网站地图重要吗,可以看电视剧的网站前几天发了一篇文章里面有一个关于事务失效的问题#xff1a;用 Spring 的 Transactional 注解控制事务有哪些不生效的场景#xff1f;其中有个热心粉丝留言分享了下#xff0c;我觉得总结得有点经验#xff0c;给置顶了#xff1a;但是我觉得还是总结得不够全#xff0c… 前几天发了一篇文章里面有一个关于事务失效的问题用 Spring 的 Transactional 注解控制事务有哪些不生效的场景其中有个热心粉丝留言分享了下我觉得总结得有点经验给置顶了但是我觉得还是总结得不够全今天栈长我再总结一下再延着这位粉丝的总结再补充完善一下不用说我肯定也不见得总结全但希望可以帮忙有需要的人。1 数据库引擎不支持事务这里以 MySQL 为例其 MyISAM 引擎是不支持事务操作的InnoDB 才是支持事务的引擎一般要支持事务都会使用 InnoDB。根据 MySQL 的官方文档https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html从 MySQL 5.5.5 开始的默认存储引擎是InnoDB之前默认的都是MyISAM所以这点要值得注意底层引擎不支持事务再怎么搞都是白搭。2 没有被 Spring 管理如下面例子所示// Service public class OrderServiceImpl implements OrderService {Transactionalpublic void updateOrder(Order order) {// update order}} 如果此时把 Service 注解注释掉这个类就不会被加载成一个 Bean那这个类就不会被 Spring 管理了事务自然就失效了。3 方法不是 public 的以下来自 Spring 官方文档When using proxies, you should apply the Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.大概意思就是 Transactional 只能用于 public 的方法上否则事务不会失效如果要用在非 public 方法上可以开启 AspectJ 代理模式。4 自身调用问题来看两个示例Service public class OrderServiceImpl implements OrderService {public void update(Order order) {updateOrder(order);}Transactionalpublic void updateOrder(Order 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(Order order) {// update order}} 这次在 update 方法上加了 TransactionalupdateOrder 加了 REQUIRES_NEW 新开启一个事务那么新开的事务管用么这两个例子的答案是不管用因为它们发生了自身调用就调该类自己的方法而没有经过 Spring 的代理类默认只有在外部调用事务才会生效这也是老生常谈的经典问题了。这个的解决方案之一就是在的类中注入自己用注入的对象再调用另外一个方法这个不太优雅另外一个可行的方案可以参考《Spring 如何在一个事务中开启另一个事务》这篇文章。5 数据源没有配置事务管理器Bean public PlatformTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource); } 如上面所示当前数据源若没有配置事务管理器那也是白搭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 updateOrder(Order order) {try {// update order} catch {}}} 把异常吃了然后又不抛出来事务也不会回滚8 异常类型错误上面的例子再抛出一个异常// Service public class OrderServiceImpl implements OrderService {Transactionalpublic void updateOrder(Order order) {try {// update order} catch {throw new Exception(更新错误);}}} 这样事务也是不生效的因为默认回滚的是RuntimeException如果你想触发其他异常的回滚需要在注解上配置一下如Transactional(rollbackFor  Exception.class) 这个配置仅限于 Throwable 异常类及其子类。总结本文总结了 8 种事务失效的场景其实发生最多就是自身调用、异常被吃、异常抛出类型不对这 3 个了像文章开头说的那样本文不一定总结得全只是总结常见的事务失效的场景如果你还知道其他场景也欢迎留言分享。 往期推荐 千万不要这样写代码9种常见的OOM场景演示Spring Boot集成Redis这个坑把我害惨了SpringBoot接口幂等性实现的4种方案
http://www.zqtcl.cn/news/999754/

相关文章:

  • 个人网站建立策划书前言ps做的网站如何转入dw
  • 怎么样用自己电脑做网站做不做生意都要知道的网站
  • 成都网站推广创新互联做平面那个网站素材好
  • 河南建设厅深圳关键词优化报价
  • 甘肃省住房建设厅网站证书查询网络营销的常用策略
  • 自助建站基础工作主要包括()上海网站关键词排名
  • 中国住房和城乡建设部网站安全小明seo教程
  • 网站基本常识wordpress怎么使用插件
  • 无锡高端网站制作广州装修公司排名
  • 做h5商城网站pc网站建设哪
  • 顺企网萍乡网站建设自己如何开自己的商城
  • 怎样做当地网站推广平顶山车祸最新新闻事件
  • 重庆网站制作1000客户营销
  • 视频播放网站 模板潍坊网站建设首荐创美网络
  • 网站静态页面模板网页设计案例代码
  • 网站开发的ie兼容做到9网站开发具体问题
  • 企业建站业务还能做吗园林景观网站模板
  • 建筑招聘网站有哪些电商商城app制作开发
  • 做网站开发 用什么在进行网站设计时
  • 21dove谁做的的网站新媒体营销论文
  • 做电影网站配什么公众号网站新闻发布系统模板
  • 网站风格发展趋势wordpress悬浮音乐插件
  • 做网站前期费用新注册公司网站建设
  • 建站平台在线提交表格功能检测站点是否使用wordpress
  • 谁能做网站开发免费软件看电视剧
  • 深圳的网站建设网站建设网页设计做网站
  • 广州网站建设网页设计贵阳网站建设宏思锐达
  • 洪栾单页网站建设象山县城乡和住房建设局网站
  • 网站留言发送到邮箱潍坊商城网站建设
  • 四川省的住房和城乡建设厅网站首页产品设计是冷门专业吗