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

如何说服别人做网站seo免费资源大全

如何说服别人做网站,seo免费资源大全,网站建设sem,温州网络公司哪家好前言:在 Java 开发中,事务管理是非常重要的一环。Spring 框架提供了Transactional注解来简化事务管理的操作,本文将深入介绍Transactional注解的用法,并结合代码示例进行详细讨论。 1.Transactional 注解简介 Transactional注解是…

        前言:在 Java 开发中,事务管理是非常重要的一环。Spring 框架提供了@Transactional注解来简化事务管理的操作,本文将深入介绍@Transactional注解的用法,并结合代码示例进行详细讨论。

1.@Transactional 注解简介

    @Transactional注解是 Spring 框架中用于管理事务的关键注解之一。通过在方法或类上添加该注解,Spring 会自动为被注解的方法创建一个事务,并在方法执行完毕后根据执行情况提交或回滚事务。这样可以确保数据库操作的原子性,保证数据的完整性。

@Service
@Transactional
public class UserService {@Autowiredprivate UserRepository userRepository;public void updateUser(User user) {userRepository.save(user);}
}

在上面的示例中,@Transactional注解被添加到UserService类上,表示其中的方法将在事务管理下执行。

2.@Transactional 失效的情况

        尽管@Transactional注解可以很好地管理事务,但在某些情况下它可能会失效,导致事务无法正常工作。以下是一些可能导致@Transactional注解失效的情况:

2.1 自调用问题 

        如果在同一个类中,一个带有@Transactional注解的方法直接调用另一个带有@Transactional注解的方法,事务可能不会起作用,因为 Spring 默认使用代理机制来管理事务,自调用会绕过代理对象,导致事务失效。

@Service
@Transactional
public class UserService {@Autowiredprivate UserRepository userRepository;public void updateUser(User user) {saveUser(user); // 这里的调用会绕过代理对象,事务失效}@Transactionalpublic void saveUser(User user) {userRepository.save(user);}
}

2.2 异常捕获问题

        当方法内部捕获了异常并不再抛出时,事务可能会失效。Spring 默认只会对未捕获的异常进行事务回滚,如果异常被捕获并在方法内部处理,事务可能无法正常回滚。

@Service
@Transactional
public class UserService {@Autowiredprivate UserRepository userRepository;public void updateUser(User user) {try {userRepository.save(user);} catch (Exception e) {// 异常被捕获,事务可能无法回滚}}
}

2.3 抛出非运行时异常

        异常虽然抛出了,但是抛出的是非RuntimeException类型的异常,依旧不会生效。

@Transactional
public void deleteUser() throws MyException{userMapper.deleteUserA();try {int i = 1 / 0;userMapper.deleteUserB();} catch (Exception e) {throw new MyException();}
}

        如果指定了回滚异常类型为Exception,那么就可以回滚非RuntimeException类型异常了。

@Transactional(rollbackFor = Exception.class)

2.4 新开启一个线程

        如下的方式deleteUserA()也不会回滚,因为spring实现事务的原理是通过ThreadLocal把数据库连接绑定到当前线程中,新开启一个线程获取到的连接就不是同一个了:

@Transactional
public void deleteUser() throws MyException{userMapper.deleteUserA();try {//休眠1秒,保证deleteUserA先执行Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}new Thread(() -> {int i = 1/0;userMapper.deleteUserB();}).start();    
}

2.5 非public方法

        如果@Transactional注解标记的方法是非public的,那么事务将失效。这是因为Spring默认使用基于代理的AOP来实现事务,而基于代理的AOP只能拦截public方法。

@Transactional
private void doSomething() {// 执行业务逻辑
}

2.6 未被Spring容器管理

        如果@Transactional注解标记的方法所在的类没有被Spring容器管理,那么事务将失效。这是因为Spring只会对由Spring容器管理的Bean进行事务管理。


public class UserService {@Autowiredprivate UserRepository userRepository;@Transactionalpublic void updateUser(User user) {userRepository.save(user);}
}

2.7 数据库本身不支持

        数据库本身不支持事务管理。mysql数据库,必须设置数据库引擎为InnoDB。

2.8 事务传播属性设置错误

        注意传播属性的设置,比如设置了:PROPAGATION_NOT_SUPPORIED(以非事务的方式执行,如果当前有事务则把当前事务挂起)。

3. 解决方案

        针对上述问题,我们可以采取一些解决方案来确保@Transactional注解的有效性。比如避免在同一个类中使用自调用的方式,或者在捕获异常后手动抛出以触发事务回滚。

4. 总结

        通过@Transactional注解,我们可以轻松管理事务,确保数据库操作的一致性。然而,在编写代码时需要注意可能导致注解失效的情况,避免出现意外的事务行为。持续学习和实践是掌握事务管理的关键,希望本文对您有所帮助。

http://www.mmbaike.com/news/68660.html

相关文章:

  • 虹口做网站价格网上在线看视频为什么卡
  • 昆明seo公司网站网络营销组合策略
  • 网站内容页怎么做的十大网络营销成功案例
  • 绍兴网络科技有限公司在广州做seo找哪家公司
  • 网站建设型网站横幅(banner)图片百度互联网营销是什么
  • 做电影网站用什么软件叫什么名字吗百度快照如何优化
  • 个人网站的制作教程企业线上培训平台
  • 企业型网站怎么做免费推广引流平台推荐
  • 推广该怎么做站长工具seo综合查询烟雨楼
  • seo网站优化公司12345浏览器网址大全
  • 安阳专业做网站公司搜索引擎优化论文
  • 长春火车站是北站吗淘宝指数
  • 建设工程合同指什么软件排名优化
  • 微信网站后期运营怎么做网络营销推广方式包括哪几种
  • 重庆教育建设集团有限公司官方网站seo排名优化推荐
  • 做当地门户网站多少钱百度服务中心人工客服电话
  • 网站建设朋友圈广告qq引流推广软件免费
  • 域名怎么做网站内容客服网站搭建
  • 开一间网站建设有限公司软文营销案例
  • 联系深圳网站制作公司aso优化什么意思
  • 网址制作网站网站排名优化公司哪家好
  • 重庆网站seo教程推广渠道平台
  • 怎样建网站邢台网站推广排名
  • 西安网站建设 中讯创赢今日财经最新消息
  • 手机网站模板开发工具网站制作需要多少钱
  • 西安建设网站排名灰色关键词排名方法
  • 哪个公司做农村产权交易网站上海aso
  • 南京定制网站建设长春网站seo公司
  • 网站app建设360seo排名点击软件
  • 建设通破解vip关键词搜索优化