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

泰和网站制作seo案例分析方案

泰和网站制作,seo案例分析方案,网络规划设计师教程pdf,asp网站验证码不显示在 Spring Boot 应用中,合理的划分事务边界对于数据一致性、提高并发性能以及避免资源长时间占用(即避免长事务)至关重要。长事务会长时间持有数据库锁和连接,降低系统吞吐量,甚至可能导致死锁或超时。 以下是一些关键…

在 Spring Boot 应用中,合理的划分事务边界对于数据一致性、提高并发性能以及避免资源长时间占用(即避免长事务)至关重要。长事务会长时间持有数据库锁和连接,降低系统吞吐量,甚至可能导致死锁或超时。

以下是一些关键策略和最佳实践,用于在 Spring Boot 中合理划分事务边界并避免长事务:

  1. 遵循单一职责的原则来设计Service 方法

    • 核心思想: Service 方法专注于完成一个明确、单一的业务逻辑单元。如果一个方法做了太多不相关的事情,它自然会变得更长,其事务边界也会随之扩大。
    • 实践: 将复杂的业务流程拆分成多个更小、更专注的 Service 方法。然后可以在一个更高层次的(可能是非事务性的)方法中编排调用这些小方法。
  2. 仅对需要事务的操作应用 @Transactional

    • 核心思想: 不是所有 Service 方法都需要事务。只有那些涉及一个或多个写操作(INSERT, UPDATE, DELETE)且需要保证原子性(要么全部成功,要么全部回滚)的操作才需要事务。纯粹的读操作通常不需要事务(除非需要特定隔离级别来保证读取一致性)。
    • 实践:
      • @Transactional 注解精确地应用在需要它的 Service 方法或类上。
      • 对于只读操作,使用 @Transactional(readOnly = true)。这不仅能向数据库和持久化框架(如 JPA)提供优化提示,还能清晰地表明该方法的意图,并且在某些数据库或配置下可能不允许写操作,增加了一层安全性。
  3. 将非事务性逻辑移出事务边界

    • 核心思想: 事务应该尽可能短,只包裹必要的数据库操作。任何不直接依赖于事务原子性的、耗时的操作都应该移到事务之外。
    • 实践:
      • 前置处理: 输入验证、数据转换、权限检查等可以在调用 @Transactional 方法之前完成。
      • 后置处理: 发送邮件/短信通知、调用外部 API、更新缓存(如果能容忍短暂不一致)、记录非关键日志、复杂计算等,可以在 @Transactional 方法成功返回之后执行。
      • 示例:
        @Service
        public class OrderService {@Autowiredprivate OrderRepository orderRepository;@Autowiredprivate NotificationService notificationService; // 假设这是非事务性的@Autowiredprivate InventoryService inventoryService; // 假设这是事务性的public void placeOrder(OrderRequest request) {// 1. 前置处理 (非事务性)validateRequest(request);UserInfo userInfo = getCurrentUser(); // 获取用户信息 (可能涉及DB读,但不需与下单事务绑定)// 2. 执行核心事务操作Order createdOrder = createOrderInTransaction(request, userInfo);// 3. 后置处理 (非事务性)notificationService.sendOrderConfirmation(createdOrder); // 发送通知triggerLogisticsAsync(createdOrder.getId()); // 异步触发物流}@Transactional // 核心事务方法protected Order createOrderInTransaction(OrderRequest request, UserInfo userInfo) {// a. 创建订单记录Order order = new Order(/* ... */);order = orderRepository.save(order);// b. 扣减库存 (调用另一个事务性方法,通常会加入当前事务)inventoryService.decreaseStock(request.getProductId(), request.getQuantity());// c. 其他必须在同一事务内完成的操作...return order;}// ... 其他方法 (validateRequest, getCurrentUser, ...)
        }
        
  4. 优化事务内的数据库操作

    • 核心思想: 事务持续时间很大程度上取决于其内部数据库操作的快慢。
    • 实践:
      • 确保 SQL 语句高效,正确使用索引。
      • 避免在事务内部执行大量数据的查询或处理,如果可以,先查询少量 ID,然后在事务外处理。
      • 使用批量操作(Batching)来减少数据库交互次数,虽然批处理本身可能在一个事务内完成,但它比逐条操作快得多。
  5. 利用异步处理 (@Async) 或消息队列 (MQ)

    • 核心思想: 对于不需要立即完成、可以容忍延迟且不影响主事务一致性的操作,将其异步化。
    • 实践: 将耗时的后置处理(如发送通知、更新统计、调用非关键外部服务)标记为 @Async 方法(需要在 Spring Boot 中启用异步支持 @EnableAsync),或者将其封装成消息发送到 MQ(如 Kafka, RabbitMQ),由独立的消费者来处理。这能让主事务快速提交和释放资源。
    • 示例 (使用 @Async):
      @Service
      public class NotificationService {@Async // 标记为异步方法public void sendOrderConfirmation(Order order) {// 模拟耗时的邮件发送try {Thread.sleep(2000); // 模拟耗时System.out.println("Sent order confirmation for order: " + order.getId());} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
      }
      
  6. 理解事务传播行为 (Propagation)

    • 核心思想: @Transactionalpropagation 属性决定了方法如何加入或创建事务。
    • 实践:
      • REQUIRED (默认): 如果当前存在事务,则加入该事务;否则,创建一个新事务。这是最常用的。
      • REQUIRES_NEW: 总是创建一个新事务。如果当前存在事务,则将当前事务挂起。这可以用来将一个大的业务逻辑分解为几个独立的物理事务,但要小心使用,可能破坏整体原子性,或在嵌套调用时增加复杂性。
      • SUPPORTS: 如果当前存在事务,则加入该事务;否则,以非事务方式执行。
      • NOT_SUPPORTED: 以非事务方式执行。如果当前存在事务,则将当前事务挂起。适合调用那些明确不需要事务或可能很慢的操作。
      • MANDATORY: 必须在一个已存在的事务中执行,否则抛出异常。
      • NEVER: 必须在没有事务的情况下执行,否则抛出异常。
    • 通过合理选择传播行为,可以更精细地控制哪些代码段包含在哪个事务中。例如,可以将慢速的外部调用封装在 NOT_SUPPORTEDREQUIRES_NEW(如果它自己需要事务)的方法中。
  7. 避免在事务中进行网络调用或长时间等待

    • 核心思想: 网络延迟是不可预测的,外部系统故障可能导致事务长时间挂起。等待用户输入更是绝对禁止。
    • 实践: 将所有需要等待外部响应的操作移出核心事务。如果必须基于外部调用的结果进行数据库操作,考虑使用事务补偿机制(如 TCC 模式)或最终一致性模型。
  8. 警惕代理和自调用问题

    • 核心思想: Spring 的 @Transactional 默认是通过 AOP 代理实现的。直接在同一个 Bean 内部调用另一个被 @Transactional 注解的方法(自调用),可能不会触发期望的事务行为(如 REQUIRES_NEW 不会启动新事务),因为它绕过了代理。
    • 实践:
      • 将需要不同事务行为的方法拆分到不同的 Bean 中。
      • 注入 Bean 自身(不推荐)。
      • 使用 AspectJ 编织(配置更复杂)。
      • 最好的方法通常是良好地设计服务层,避免复杂的自调用事务场景。
  9. 监控事务执行时间

    • 核心思想: 你需要知道哪些事务是长的。
    • 实践: 使用 APM 工具(如 SkyWalking, Pinpoint, Dynatrace)或 Spring Boot Actuator 结合 Micrometer 来监控事务的执行时间。定期审查慢事务并进行优化。

通过综合运用这些策略,可以有效的管理 Spring Boot 应用中的事务边界,确保事务既能保证数据一致性,又能保持简短高效,从而提升整体系统性能和稳定性。

http://www.hrbkazy.com/news/6025.html

相关文章:

  • 做超市商品海报免费海报模版网站在线制作网页网站
  • 百度怎样做网站排名往前竞价交易规则
  • 情人做网站东莞seo网络营销
  • 知名网站建设策划企业做网上推广
  • 开源众包官网兼职平台网络优化是做什么的
  • 国外做ppt的网站有哪些交换友情链接前后必须要注意的几点
  • 丰县徐州网站开发全网投放广告的渠道有哪些
  • 使用java做后台网站公众号排名优化
  • wordpress详细功能整站seo优化哪家好
  • 网站开发要先买服务器吗推广网站要注意什么
  • dede 如何做视频网站查询网站相关网址
  • 定制网站制作公司手机网站优化排名
  • 医院门户网站模板刚刚刚刚刚刚好痛
  • 还有哪些行业可以做垂直网站线下营销推广方式有哪些
  • 免费企业网站系统源码下载重庆网站seo公司
  • 嘉兴网站优化排名seo网站关键词优化
  • 嘉兴网站建设平台推广之家官网
  • 学做网站设计爱站网官网关键词
  • dw做的静态网站怎么分享链接建站
  • 今日世界军事新闻seo 专业
  • 成武城乡住房建设局网站网站建设与管理就业前景
  • 网站k网络软营销
  • 用花瓣网站上的图片做游戏行吗策划是做什么的
  • 社保减员要怎么做 国税局网站网络推广平台代理
  • 规划网站站点需要遵循哪些原则沈阳seo团队
  • 内网网站开发报价seo网站推广有哪些
  • 太原市手机微网站建设碉堡了seo博客
  • 成品网站建设咨询软文标题
  • ukidc做电影网站营销策划方案怎么写?
  • 搜索优化网络推广宁波受欢迎全网seo优化