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

网站建设做网站好做吗南通做网站ntwsd

网站建设做网站好做吗,南通做网站ntwsd,营销的主要目的有哪些,精准数据营销方案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.zqtcl.cn/news/509775/

相关文章:

  • 济南专业网站优化如何制作小程序二维码
  • 建站平台软件猪八戒做网站要多少钱
  • 建设集团网站专业开发网站多少钱
  • 网站制作流程有哪些wordpress众筹
  • 网站打开是建设中手机咋建网站
  • 外贸专业网站的公司建百度网站
  • 北京做网站开发公司有哪些网站技术开发文档模板
  • 图解asp.net网站开发实战外管局网站先支后收怎么做报告
  • 访问自己做的网站吗织梦自动生成手机网站
  • 湖南岳阳网站开发网络公司兰州最好的互联网公司
  • 网站上线 流程网站左侧漂浮代码
  • 基于mvc4商务网站开发网站建设引言
  • 深圳网站设计师西安企业100强
  • dz网站数据备份购物网站配色怎么设计
  • 适合网站开发工程师的公司图片百度搜索
  • 网站界面设计需求wordpress single.php
  • 比较权威的房产网站合肥瑶海区地图全图高清版
  • 网站建设公司果动小学电教检查网站建设资料
  • 电子商务网站设计成功的要素青岛网页设计师
  • 门户网站平台建设方案网站开发后如何上线
  • 濮阳做网站的番禺区网络推广渠道
  • 杭州网站seo外包外链图片
  • 苏州网站建设有限公司枣阳建网站
  • 网站开发平台选择如何制作购物网站
  • 专业建设网站企业外包公司企业网站
  • 网站开发需求确认书国家商标注册官网查询系统
  • 国内个人网站建设wordpress 添加搜索
  • 网站建设创新简述网站开发具体流程
  • wordpress小说网站模板南宁企业网站seo
  • 网站开发与设计课程时间网站推广的搜索引擎推广