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

专业做皮草的网站/seo实战密码第四版pdf

专业做皮草的网站,seo实战密码第四版pdf,wordpress md 方程组,广州工商注册公司代办1. 事务管理概述 事务管理是确保数据库操作满足ACID(原子性、一致性、隔离性、持久性)特性的核心机制。在Java中,尤其是在Spring框架下,事务管理分为两种模式: 编程式事务:通过代码显式控制事务边界。 声…

1. 事务管理概述

事务管理是确保数据库操作满足ACID(原子性、一致性、隔离性、持久性)特性的核心机制。在Java中,尤其是在Spring框架下,事务管理分为两种模式:

  • 编程式事务:通过代码显式控制事务边界。

  • 声明式事务:通过配置或注解隐式管理事务,由框架自动处理。


2. 编程式事务

定义与特点

  • 定义:开发者通过编写代码显式管理事务的开始、提交和回滚。

  • 特点

    • 高灵活性,可精确控制事务边界。

    • 代码侵入性强,事务逻辑与业务逻辑耦合。

    • 适用于复杂事务场景(如嵌套事务)。

实现方式

Spring提供了两种编程式事务管理工具:

  1. TransactionTemplate(推荐)

  2. PlatformTransactionManager(直接操作事务管理器)

代码示例

使用 TransactionTemplate
@Service
public class OrderService {private final TransactionTemplate transactionTemplate;private final OrderDao orderDao;@Autowiredpublic OrderService(PlatformTransactionManager transactionManager, OrderDao orderDao) {this.transactionTemplate = new TransactionTemplate(transactionManager);this.orderDao = orderDao;}public void createOrder(Order order) {transactionTemplate.execute(status -> {try {orderDao.save(order);       // 业务操作1inventoryDao.deductStock(); // 业务操作2return true; // 提交事务} catch (Exception e) {status.setRollbackOnly();   // 标记回滚return false;}});}
}
使用 PlatformTransactionManager
public void updateData() {TransactionDefinition definition = new DefaultTransactionDefinition();TransactionStatus status = transactionManager.getTransaction(definition);try {jdbcTemplate.update("UPDATE account SET balance = ? WHERE id = ?", 100, 1);jdbcTemplate.update("UPDATE inventory SET stock = ? WHERE product_id = ?", 50, 100);transactionManager.commit(status); // 提交事务} catch (DataAccessException e) {transactionManager.rollback(status); // 回滚事务throw e;}
}

3. 声明式事务

定义与特点

  • 定义:通过注解或XML配置声明事务行为,由框架(如Spring AOP)自动管理事务。

  • 特点

    • 低侵入性,业务代码与事务逻辑解耦。

    • 配置简单,适合标准化事务场景。

    • 默认仅对RuntimeException回滚(可通过配置调整)。

实现方式

  • 基于注解:使用@Transactional注解。

  • 基于XML:通过AOP配置事务切面。

代码示例

使用 @Transactional 注解
@Service
public class PaymentService {private final PaymentDao paymentDao;private final AuditLogDao auditLogDao;@Autowiredpublic PaymentService(PaymentDao paymentDao, AuditLogDao auditLogDao) {this.paymentDao = paymentDao;this.auditLogDao = auditLogDao;}@Transactional(propagation = Propagation.REQUIRED,  // 事务传播行为isolation = Isolation.DEFAULT,        // 隔离级别rollbackFor = Exception.class         // 指定回滚的异常类型)public void processPayment(Payment payment) {paymentDao.save(payment);      // 业务操作1auditLogDao.logPayment(payment); // 业务操作2// 若任何操作抛出Exception,事务自动回滚}
}
基于XML的AOP配置
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean><!-- 定义事务切面 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="process*" propagation="REQUIRED" rollback-for="Exception"/></tx:attributes>
</tx:advice><!-- 配置AOP -->
<aop:config><aop:pointcut id="serviceMethods" expression="execution(* com.example.service.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
</aop:config>

4. 核心对比

特性编程式事务声明式事务
控制方式显式代码控制(begin/commit/rollback隐式配置或注解(@Transactional
侵入性高(事务代码与业务耦合)低(通过AOP解耦)
灵活性高(可精细控制事务边界)低(依赖框架默认行为)
适用场景复杂事务(如嵌套事务、条件回滚)标准事务(如单方法单事务)
维护成本高(需手动管理事务代码)低(集中配置,易于维护)
异常处理需手动捕获并回滚自动回滚(默认仅对RuntimeException

5. 最佳实践与注意事项

编程式事务

  1. 适用场景

    • 需要在一个方法内管理多个独立事务。

    • 需要根据条件动态决定是否提交或回滚。

  2. 注意事项

    • 避免过度嵌套事务,防止死锁。

    • 确保在异常时正确调用setRollbackOnly()

声明式事务

  1. 适用场景

    • 简单CRUD操作。

    • 需要快速集成事务管理的标准化服务。

  2. 注意事项

    • 默认仅对RuntimeException回滚,需通过rollbackFor显式配置其他异常。

    • 避免在类内部调用@Transactional方法(AOP代理失效)。


6. 附录:常见问题(FAQ)

Q1:声明式事务为何不生效?

  • 可能原因

    • 方法非public(Spring AOP无法代理)。

    • 异常被catch未抛出(事务拦截器未检测到异常)。

    • 未启用事务管理(如缺少@EnableTransactionManagement)。

Spring事务失效的十大陷阱与深度解析https://blog.csdn.net/yiridancan/article/details/146842725?spm=1011.2415.3001.10575&sharefrom=mp_manage_link

Q2:如何选择事务传播行为?

  • 常见选项

    • REQUIRED(默认):加入当前事务,无事务则新建。

    • REQUIRES_NEW:始终新建事务,挂起当前事务。

    • NESTED:嵌套事务(依赖数据库支持)。

Q3:事务隔离级别如何配置?

  • 选项

    • READ_UNCOMMITTED

    • READ_COMMITTED(推荐)

    • REPEATABLE_READ

    • SERIALIZABLE


总结

  • 编程式事务:适合需要精细控制的复杂场景,但增加代码复杂度。

  • 声明式事务:简化开发,适合标准化需求,依赖框架默认行为。

根据业务需求灵活选择,多数场景下推荐声明式事务为主,复杂逻辑辅以编程式事务。

http://www.lryc.cn/news/580697.html

相关文章:

  • 东莞中央空调东莞网站建设/关键的近义词
  • 北京集团网站建设/陕西seo推广
  • 广东专业做网站/公众号怎么推广和引流
  • 白云网站建设/重庆seo海洋qq
  • 网页游戏排行榜2020排行榜/seo在哪可以学
  • 微网站建设教学/百度竞价多少钱一个点击
  • 淘宝上可以做网站吗/网店代运营靠谱吗
  • 建设银行网站设计的优点/推广品牌的方法
  • 武汉大学人民医院电话/自己搜20条优化措施
  • 重庆网站seo方法/搜索引擎营销sem包括
  • 重庆旅游网站建设规划/谷歌seo服务公司
  • 建材公司网站建设方案/2023年4 5月份疫情结束吗
  • 从事网站开发需要哪些知识/软文代写文案
  • wordpress速度慢设置/百度关键词优化公司
  • 单位网站制作费用报价单/百度seo排名优化助手
  • 国外可以做推广的网站有哪些/网络营销产品策略
  • 做一电影网站怎么赚钱/怎么推广
  • 做自营网站还是amazon/建站系统主要包括
  • wordpress缓存稿/江苏企业seo推广
  • 营销型网站制作方案/一份完整的品牌策划方案
  • 陕西住房和城乡建设部网站首页/搜索引擎营销包括
  • 哈尔滨网站建设信息/河南做网站的
  • 国内优秀的网站/个人博客搭建
  • php和什么语言做网站/个人博客网页设计html
  • 郑州网站建设公司招聘/新手怎么学电商运营
  • 凡科2网站需要备案吗/太原seo外包服务
  • 专业独立门户网站建设/企业培训机构排名
  • 五道口网站建设公司/网店代运营正规公司
  • 有没有99块钱做网站/江门网站定制多少钱
  • 哪家公司做网站好/西地那非片的正确服用方法