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

揭阳网站制作软件南昌做seo的公司

揭阳网站制作软件,南昌做seo的公司,设计师网址导航官网,单页设计制作SpringBoot中的事务管理#xff0c;用得好#xff0c;能确保数据的一致性和完整性#xff1b;用得不好#xff0c;可能会给性能带来不小的影响哦。 基本使用 在SpringBoot中#xff0c;事务的使用非常简洁。首先#xff0c;得感谢Spring框架提供的Transactional注解用得好能确保数据的一致性和完整性用得不好可能会给性能带来不小的影响哦。 基本使用 在SpringBoot中事务的使用非常简洁。首先得感谢Spring框架提供的Transactional注解这个小东西可以说是非常强大了。 让我们先看一个基础的例子 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;Service public class UserService {Autowiredprivate UserRepository userRepository;Transactionalpublic void createUser(String name) {User user new User(name);userRepository.save(user);// 这里假设有其他的逻辑操作} }在这个例子中我们通过Transactional注解标记了createUser方法。这意味着当这个方法被调用时Spring会为我们自动创建一个事务。如果方法正常执行完毕事务就会提交如果遇到异常事务就会回滚确保数据的一致性。 最近无意间获得一份阿里大佬写的刷题笔记一下子打通了我的任督二脉进大厂原来没那么难。 这是大佬写的 7701页的BAT大佬写的刷题笔记让我offer拿到手软 开启事务 虽然我们已经看到了如何使用Transactional但是你知道Spring是如何开启事务的吗其实当我们使用Transactional注解时Spring会通过AOP面向切面编程在运行时创建代理对象来管理事务的开启和关闭。这个过程对我们来说是透明的但了解其背后的机制对于深入理解Spring事务是很有帮助的。 事务回滚 默认情况下如果被Transactional注解的方法抛出了运行时异常RuntimeException或者ErrorSpring就会回滚事务。但是如果你想让事务在遇到非运行时异常时也回滚可以这样做 Transactional(rollbackFor Exception.class) public void createUserWithRollbackForException(String name) throws Exception {// ... }性能优化 事务虽好但也不是没有成本的。在某些高并发场景下过多的事务操作可能会成为性能瓶颈。为了优化性能我们可以通过以下几种方式 减少事务范围尽量让事务只包含那些必须要在同一事务中完成的操作。只读事务如果事务只涉及到数据的读取可以将事务标记为只读这样可以帮助数据库优化事务处理。 Transactional(readOnly true) public User findUserById(Long id) {return userRepository.findById(id).orElse(null); }失效场景 在使用Spring事务的时候有些情况可能会导致事务失效比如 自调用问题在同一个类中一个非事务方法调用事务方法事务是不会起作用的。异常处理如果你在事务方法中捕获了所有异常并没有重新抛出事务是不会回滚的。 使用场景 事务通常用在需要保证一系列操作要么全部成功要么全部失败的场景比如 用户注册时需要同时创建用户记录和用户的初始数据。订单支付时需要更新订单状态和用户的账户余额。 代码示例 让我们再看一个例子模拟用户转账的场景 Transactional public void transfer(Long fromId, Long toId, BigDecimal amount) {User fromUser userRepository.findById(fromId).orElseThrow();User toUser userRepository.findById(toId).orElseThrow();fromUser.setBalance(fromUser.getBalance().subtract(amount));toUser.setBalance(toUser.getBalance().add(amount));userRepository.save(fromUser);userRepository.save(toUser); }在这个例子中我们通过事务确保了转账操作的原子性。如果在转账过程中发生任何异常比如余额不足整个操作都会回滚保证账户的数据一致性。 SpringBoot中事务管理的一些更高级和具体的应用场景 示例1声明式事务的传播行为 Spring事务的传播行为定义了事务方法之间的交互方式。举个例子我们来看REQUIRED和REQUIRES_NEW传播行为的区别。 Service public class AccountService {Autowiredprivate TransferService transferService;Transactional(propagation Propagation.REQUIRED)public void methodA() {// 这里的操作在methodA的事务范围内transferService.methodB();// 如果methodB出错整个methodA都会回滚}Transactional(propagation Propagation.REQUIRES_NEW)public void methodB() {// 这里的操作有自己的独立事务// 即使methodA失败了methodB的操作还是会提交} }示例2编程式事务管理 除了声明式事务Spring还支持编程式事务管理这在某些复杂的场景下非常有用。 Service public class ComplexService {Autowiredprivate TransactionTemplate transactionTemplate;public void executeComplexLogic() {transactionTemplate.execute(new TransactionCallbackVoid() {Overridepublic Void doInTransaction(TransactionStatus status) {// 这里是你的业务逻辑// 如果需要回滚可以调用 status.setRollbackOnly();return null;}});} }示例3事务的隔离级别 事务的隔离级别决定了一个事务可能受其他并发事务影响的程度。比如我们来看看如何设置隔离级别 Transactional(isolation Isolation.SERIALIZABLE) public void transferMoney(Long fromAccountId, Long toAccountId, BigDecimal amount) {// 这个方法会以最高的隔离级别运行以避免并发事务带来的问题// 但是性能可能会受影响 }示例4事务超时设置 在某些长时间运行的事务中你可能需要设置事务的超时时间以避免长时间占用资源。 Transactional(timeout 10) // 10秒超时 public void processLargeData() {// 这个方法如果运行超过10秒事务会被标记为回滚 }示例5事务回滚的条件自定义 有时候你可能需要自定义事务回滚的条件。比如只在特定的异常出现时才回滚。 Transactional(rollbackFor {CustomException.class}) public void updateUserDetails(User user) throws CustomException {// 这个方法只在CustomException抛出时才回滚// 其他异常不会触发回滚 }示例6嵌套事务 嵌套事务允许在一个事务内部开始一个新的事务。如果内部事务失败它会回滚到它开始的状态而不影响外部事务。 Transactional public void parentMethod() {// 父事务的操作...try {nestedMethod();} catch (Exception e) {// 处理内部事务异常父事务可以继续}// 父事务的其他操作... }Transactional(propagation Propagation.NESTED) public void nestedMethod() {// 嵌套事务的操作... }示例7声明式事务与异常处理 处理声明式事务时异常的处理方式至关重要。下面是一个常见的错误处理方式。 Transactional public void updateUser() {try {// 更新用户数据的操作...} catch (Exception e) {// 捕获异常这将导致事务不回滚} }在这个例子中由于异常被捕获并没有重新抛出事务将不会回滚这可能会导致数据的不一致性。 示例8使用事务同步管理器 在某些情况下你可能需要直接与事务同步管理器进行交互以获取当前事务的状态信息。 public void complexBusinessLogic() {boolean isCurrentTransactionActive TransactionSynchronizationManager.isActualTransactionActive();if (isCurrentTransactionActive) {// 执行依赖于当前事务的操作...} }示例9异步方法与事务 异步方法和事务一起使用时需要特别小心因为异步方法通常会在不同的线程中运行这可能会导致事务管理出现问题。 Async Transactional public FutureString asyncMethodWithTransaction() {// 异步操作但事务可能不会按预期工作// 因为它可能在不同的线程中执行return new AsyncResult(Done); }示例10事务日志记录 在某些业务场景中你可能需要记录事务的执行情况特别是在事务提交或回滚时。 Transactional public void transactionalMethodWithLogging() {// 事务操作...TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {Overridepublic void afterCommit() {// 记录事务提交后的日志}Overridepublic void afterCompletion(int status) {if (status TransactionSynchronization.STATUS_ROLLED_BACK) {// 记录事务回滚的日志}}}); }通过这些示例你可以看到Spring事务管理在不同场景下的应用。 理解这些复杂场景对于能够在实际开发中灵活运用Spring事务管理至关重要。 记住每个场景都有其特殊性选择正确的事务策略可以帮助你避免许多常见的问题。 核心要点 基本使用使用Transactional注解来声明事务这是Spring提供的一种声明式事务管理方式。事务传播行为Spring事务的传播行为定义了事务之间的相互作用如REQUIRED, REQUIRES_NEW, NESTED等这决定了事务是否共享或独立。事务的隔离级别隔离级别如READ_COMMITTED, SERIALIZABLE等控制事务之间的可见性防止诸如脏读、不可重复读、幻读等问题。事务的回滚规则默认情况下Spring仅在运行时异常发生时回滚事务。可通过rollbackFor自定义回滚条件。超时和只读设置可以设置事务的超时时间和声明只读事务以优化性能和资源利用。 高级应用场景 编程式事务管理通过TransactionTemplate或直接使用PlatformTransactionManager来手动管理事务。嵌套事务通过NESTED传播行为实现嵌套事务内部事务失败不影响外部事务。异步和事务异步方法中使用事务需要特别注意由于执行线程的不同可能影响事务的管理。事务同步管理使用TransactionSynchronizationManager进行事务的细粒度控制如在事务提交或回滚后执行特定操作。异常处理与事务回滚异常处理在事务中非常重要不当的异常处理可能导致事务不回滚引起数据不一致。 实际应用建议 合理设计事务范围避免将大量操作包含在单一事务中以减少资源锁定时间和提高性能。注意异常处理确保适当的异常抛出以触发事务回滚。避免在异步方法中使用事务或者确保你理解如何在多线程环境下正确管理事务。谨慎使用嵌套事务它们可能会增加复杂性和性能开销。监控和调优在生产环境中监控事务的性能根据需要调整事务策略和配置。 总之SpringBoot中的事务管理是一个强大但需要谨慎使用的工具。 理解它的工作原理和应用场景可以帮助你更有效地管理数据一致性和应用性能。 记住每个应用的需求不同所以在使用事务时总是要考虑到你的具体场景和需求。 最后说一句(求关注求赞别白嫖我) 最近无意间获得一份阿里大佬写的刷题笔记一下子打通了我的任督二脉进大厂原来没那么难。 这是大佬写的 7701页的BAT大佬写的刷题笔记让我offer拿到手软 项目文档视频 项目文档 视频 本文已收录于我的技术网站 ddkk.com有大厂完整面经工作技术架构师成长之路等经验分享 求一键三连点赞、分享、收藏 点赞对我真的非常重要在线求赞加个关注我会非常感激
http://www.tj-hxxt.cn/news/143437.html

相关文章:

  • 公司网站建设文案五大跨境电商平台对比分析
  • 网站模板设计举例创办网站要多少钱
  • 永康企业网站建设公司门户网站建设服务报价
  • 公明网站建设怎么做wordpress 图片路径加密
  • 娱乐建设网站公司网站制作费用申请
  • 织梦手机网站制作在哪可以建一个网站
  • 怎么看网站有没有做301跳转小小影院免费高清电视剧
  • 有做网站代理运营的吗番禺人才网单位招考
  • 东莞 网站建设企业南通优普企业网站建设
  • 响应式网站建设的好处珠海网页设计公司
  • 网站怎么做等级保护母婴的网站建设
  • 南通做网站的公司有哪些绍兴柯桥建设局网站
  • 网站开发设计的步骤电子商务网站建设公
  • 定制摄影app和摄影网站的区别网站建设速度如何解决
  • 做国外购物网站长沙企业网站开发
  • 特色专业建设网站ps 怎么做网站搜索框
  • 虚拟主机上的网站上传方式网站设计方案应该怎么做
  • 企业网站手机端wordpress 登陆可见
  • 做足球网站前景怎样用自己的pid做搜索网站
  • 网站建设分几块wordpress分类名称
  • 企业网站建设建议萍乡招聘网站建设
  • 微商城网站建设市场wordpress 图片选择器
  • jsp网站开发详细教程哈尔滨自助建站模板
  • 网页网站开发wordpress 企业网站制作
  • 网站我优化黄渡网站建设
  • 浙江省建设厅网站高工emlog和wordpress
  • 广州制作网站公司简介网站开发公司 商业计划书
  • 单页 网站 模板WordPress页面生成时间
  • 网站外链有死链wordpress 禁止更新提示
  • 成都模板网站建设服务天津网站制作的公司