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

佛山市住房和建设局网站什么好的设计网站

佛山市住房和建设局网站,什么好的设计网站,大秀平台app下载,单位网站开发费用是否计入无形资产Spring事务失效的几种情况 1、未被Spring管理的类中的方法 这种情况是指:没有在类上添加Service、Repository、Component等注解将类交由Spring管理,然后该类中还有加上了Transactional注解 例如: Service //如果没有添加Service这个注解…

Spring事务失效的几种情况

1、未被Spring管理的类中的方法

这种情况是指:没有在类上添加@Service@Repository@Component等注解将类交由Spring管理,然后该类中还有加上了@Transactional注解

例如:

@Service    //如果没有添加@Service这个注解,就是一种失效的情况
public class MyService {@Transactionalpublic void myTransactionalMethod() {// 事务管理的代码}
}

 

2、未正确配置事务管理器

在Spring Boot中,通常会自动配置事务管理器。然而,如果你手动配置了数据源或事务管理器,并且配置不正确,事务可能会失效。确保你的DataSourcePlatformTransactionManager配置正确

这里是它的一些错误情况

  1. 数据源配置错误: 确保数据源的驱动类、连接URL、用户名和密码等配置是正确的。

  2. 事务管理器配置错误: 确保事务管理器的配置正确,并且它引用了正确的实体管理器工厂。

  3. 实体管理器工厂配置错误: 确保实体管理器工厂的配置正确,包括数据源的引用、实体类的扫描路径等。

  4. 未加入适当的数据库依赖: 确保项目的依赖中包含了正确的数据库驱动依赖。

3、异常被捕获而不重新抛出

Spring事务默认只对未捕获的运行时异常进行回滚。如果在事务内捕获了异常并没有重新抛出,事务可能不会回滚。 

看如下的代码,这个哪里有问题呢?我们该如何来修改它

@Transactional
public void myTransactionalMethod() {try {// 可能会抛出异常的代码// ...} catch (Exception e) {// 异常被捕获,但没有重新抛出// 可能导致事务不回滚log.error("An error occurred: {}", e.getMessage());}
}

在上述代码中,如果在try块中的代码抛出了异常,但在catch块中没有重新抛出该异常,那么事务可能不会回滚。因为Spring默认只回滚未捕获的运行时异常。为了确保事务能够正常回滚,应该在catch块中将异常重新抛出或采取其他适当的措施。

下面是它修改之后的代码:

@Transactional
public void myTransactionalMethod() {try {// 可能会抛出异常的代码// ...} catch (Exception e) {// 将异常重新抛出throw e;}
}

4、自调用问题

这个就是一般最容易出现的问题了(个人感觉)

就是在同一个类中,直接调用了另一个加上了@Transactional注解的方法,使Spring可能无法截获这个调用(因为调用并没有经过代理对象),所以事务失效了。

就是下面例子这种情况:

@Service
public class MyService {@Transactionalpublic void methodA() {// 一些数据库操作}public void methodB() {// 一些逻辑操作methodA(); // 在同一个类中直接调用methodA}
}

在这个例子中,methodB在同一个类中直接调用了methodA。Spring的AOP代理没有介入,即没有生成代理对象,所以methodA可能就受不到@Transactional注解的影响。

 

那如何来解决这种情况呢?

解决方法:

1、使用代理对象调用方法A(通过GPT了解的)

2、使用AopContext.currentProxy()获取当前代理对象(黑马视频中学的)

方法一: 使用代理对象调用方法A

@Service
public class MyService {@Autowiredprivate MyService self; // 自动注入当前类的实例@Transactionalpublic void methodB() {// 通过代理对象调用methodAself.methodA();}public void methodA() {// 一些数据库操作}
}

 方法二:使用AopContext.currentProxy()获取当前代理对象

//使用前提:需要在SpringBoot启动类上加上@EnableAspectJAutoProxy(exposeProxy = true) 
//该注解目的是:暴露代理对象,如果没有暴露,我们是拿不到代理对象的
@Service
public class MyService {@Transactionalpublic void methodB() {// 获取当前代理对象MyService proxy = (MyService) AopContext.currentProxy();// 通过代理对象调用methodAproxy.methodA();}public void methodA() {// 一些数据库操作}
}

更多了解:

百度安全验证

https://www.cnblogs.com/xiaowangbangzhu/p/17143288.html

http://www.yayakq.cn/news/205308/

相关文章:

  • 做电视直播网站做传奇网站云服务器地域改选哪里
  • 环企优站网站建设徐州百度关键词优化
  • 公司建推广网站多少钱优化大师win10
  • 泉州工作室网站建设郑州哪里有做网站
  • 中国建筑信息查询平台苏州网站建设优化
  • 酒店网站的规划与建设袜子技术支持深圳网站建设
  • 网站方案策划书18000字郑州微网站建设
  • 池州网站开发公司招聘wordpress图片位置
  • 制作单位网站如何做网站 新手 个人 教程
  • jsp网站开发框架网站后端用什么语言
  • 中国市场营销网网站有创意的设计工作室名字
  • 广东网站建设哪家网站如何做一张轮播图
  • 重庆购务网站建设视频网站怎么搭建
  • 网页设计个人网站怎么做中宁建设局网站
  • 重庆专业做网站的公司电脑打不开网页但是能上网
  • 沈阳曙光医院看男科怎么样怎么建设seo自己网站
  • 网站建设规划方案书最好的文件管理软件
  • 计算机网站建设职业群重庆网站建设就找承越
  • 张家港网站网络优化网页的制作软件
  • 网站pc端和手机端分离怎么做通州广州网站建设
  • 深圳猪八戒网站建设房地产网站建设公司推荐
  • dw中用php做网站定制软件开发软件
  • 正规加盟项目站内seo是什么意思
  • 如何做网站线上监控手机淘宝
  • 万维网的代表网站怎样汉化wordpress主题
  • 比较好的网站开发团队对网站主要功能界面进行赏析
  • 网站推广 2015谷歌wordpress-5.6.20下载
  • 欧普建站用dw制作购物网站首页
  • 网站死链接是什么家具营销型网站
  • 网站为什么被降权环球影城有存放行李的吗