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

网站备案 代办百度关键词屏蔽

网站备案 代办,百度关键词屏蔽,东莞网站开发前三强,网站关键词怎么做效果好一、事务的本质:数据库操作的"原子性保证" 想象你正在银行进行转账操作: -- 从A账户扣除1000元 UPDATE accounts SET balance balance - 1000 WHERE id A;-- 向B账户增加1000元 UPDATE accounts SET balance balance 1000 WHERE id B;关…

一、事务的本质:数据库操作的"原子性保证"

想象你正在银行进行转账操作:

-- 从A账户扣除1000元
UPDATE accounts SET balance = balance - 1000 WHERE id = 'A';-- 向B账户增加1000元
UPDATE accounts SET balance = balance + 1000 WHERE id = 'B';

关键问题:如果第一条SQL执行后系统崩溃,会发生什么?

  • A账户被扣款,但B账户未收到 → 数据不一致

事务解决方案

START TRANSACTION;  -- 开启事务UPDATE accounts SET balance = balance - 1000 WHERE id = 'A';
UPDATE accounts SET balance = balance + 1000 WHERE id = 'B';COMMIT;  -- 提交事务(或ROLLBACK回滚)

事务确保:要么所有操作都成功,要么全部失败回滚

二、Spring事务核心概念

1. 事务四大特性(ACID)

特性说明示例
Atomicity(原子性)事务是不可分割的最小单元转账操作要么全执行,要么全不执行
Consistency(一致性)事务前后数据状态一致转账前后总金额不变
Isolation(隔离性)并发事务互不干扰转账时其他查询不受影响
Durability(持久性)事务提交后永久生效转账成功后数据永久保存

2. Spring事务管理关键接口 

public interface PlatformTransactionManager {// 获取事务状态TransactionStatus getTransaction(TransactionDefinition definition);// 提交事务void commit(TransactionStatus status);// 回滚事务void rollback(TransactionStatus status);
}public interface TransactionDefinition {// 传播行为int getPropagationBehavior();// 隔离级别int getIsolationLevel();// 超时时间int getTimeout();// 是否只读boolean isReadOnly();
}

三、事务传播机制详解

1. 为什么需要传播机制?

考虑电商下单场景:

@Service
public class OrderService {@Transactionalpublic void createOrder(Order order) {// 保存订单orderDao.save(order);// 扣减库存inventoryService.deductStock(order);// 增加积分pointsService.addPoints(order.getUserId(), order.getAmount());}
}@Service
public class InventoryService {@Transactionalpublic void deductStock(Order order) {// 扣减库存逻辑}
}

关键问题

  • createOrder调用deductStock时,应该使用同一个事务还是独立事务?
  • 如果库存扣减失败,订单是否应该回滚?
  • 传播机制定义了事务方法相互调用时的行为规则

2. 七种传播行为详解

(1) REQUIRED(默认):有则加入,无则新建
@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {// 事务操作...methodB();  // 调用B方法
}@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {// 事务操作...
}

行为分析

  • 如果methodA有事务:methodB加入该事务
  • 如果methodA无事务:methodB新建事务

适用场景:大多数业务场景(如订单创建流程)

(2) SUPPORTS:有则加入,无则非事务
@Transactional(propagation = Propagation.SUPPORTS)
public void getProductInfo(Long id) {// 查询操作
}

行为分析

  • 调用方有事务:加入事务
  • 调用方无事务:非事务执行

适用场景:查询操作(可读性优先)

(3) MANDATORY:必须有事务,否则抛异常
@Transactional(propagation = Propagation.MANDATORY)
public void updatePrice(Product product) {// 更新价格
}

适用场景:必须保证事务性的操作(如资金变动)

(4) REQUIRES_NEW:新建独立事务
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void logOperation(String action) {// 记录操作日志
}

行为分析

  • 无论调用方是否有事务,都新建事务
  • 挂起调用方事务(如果存在)

适用场景:日志记录、非核心操作(失败不影响主流程)

(5) NOT_SUPPORTED:非事务执行
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void sendNotification(User user) {// 发送通知(无需事务)
}

行为分析

  • 挂起调用方事务(如果存在)
  • 非事务执行当前方法

适用场景:发送消息、通知等非关键操作

(6) NEVER:禁止事务,否则抛异常
@Transactional(propagation = Propagation.NEVER)
public void getCacheData(String key) {// 获取缓存数据
}

行为分析

  • 调用方有事务:抛出IllegalTransactionStateException
  • 调用方无事务:正常执行

适用场景:缓存操作等不需要事务的场景

(7) NESTED:嵌套事务
@Transactional(propagation = Propagation.NESTED)
public void updateInventory(Order order) {// 更新库存
}

行为分析

  • 调用方有事务:创建嵌套事务(保存点)
  • 调用方无事务:新建事务(同REQUIRED)

特点

  • 嵌套事务回滚不影响外部事务
  • 外部事务回滚会导致嵌套事务回滚

适用场景:部分可独立失败的操作(如库存扣减)

3. 传播行为对比表

传播行为当前有事务当前无事务异常影响范围适用场景
REQUIRED加入新建全部回滚通用业务
SUPPORTS加入非事务部分回滚查询操作
MANDATORY加入抛异常全部回滚关键操作
REQUIRES_NEW新建新建独立回滚日志记录
NOT_SUPPORTED非事务非事务无影响通知发送
NEVER抛异常非事务无影响缓存操作
NESTED嵌套事务新建部分回滚库存扣减

四、传播机制实战案例

案例1:订单创建(REQUIRED + REQUIRES_NEW)

@Service
public class OrderService {@Autowiredprivate OrderDao orderDao;@Autowiredprivate LogService logService;@Transactional(propagation = Propagation.REQUIRED)public void createOrder(Order order) {try {// 保存订单orderDao.save(order);// 记录日志(独立事务)logService.log("订单创建", order.getId());} catch (Exception e) {// 订单保存失败会回滚,但日志已独立提交throw new OrderException("订单创建失败");}}
}@Service
public class LogService {@Transactional(propagation = Propagation.REQUIRES_NEW)public void log(String action, Long orderId) {// 记录操作日志(即使订单失败,日志仍保留)}
}

 案例2:用户注册(NESTED事务)

@Service
public class UserService {@Transactional(propagation = Propagation.REQUIRED)public void register(User user) {// 保存用户userDao.save(user);try {// 初始化账户(嵌套事务)accountService.initAccount(user.getId());} catch (Exception e) {// 账户初始化失败,但用户注册仍成功log.error("账户初始化失败", e);}// 发送欢迎邮件(非事务)emailService.sendWelcomeEmail(user.getEmail());}
}@Service
public class AccountService {@Transactional(propagation = Propagation.NESTED)public void initAccount(Long userId) {// 初始化用户账户(可独立失败)}
}

五、隔离级别与传播机制协同

1. 隔离级别回顾

隔离级别脏读不可重复读幻读性能
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ中低
SERIALIZABLE

2. 隔离级别与传播行为组合 

// 资金转账服务(高隔离级别)
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ
)
public void transfer(TransferRequest request) {// 转账核心逻辑
}// 商品查询服务(低隔离级别)
@Transactional(propagation = Propagation.SUPPORTS,isolation = Isolation.READ_COMMITTED
)
public Product getProduct(Long id) {// 查询商品信息
}

六、Spring事务实现原理

传播行为实现关键代码

public class TransactionManager {public void execute(TransactionDefinition definition, Runnable task) {// 1. 获取当前事务状态TransactionStatus status = getTransaction(definition);try {// 2. 执行业务逻辑task.run();// 3. 提交事务commit(status);} catch (Exception ex) {// 4. 回滚事务rollback(status);throw ex;}}private TransactionStatus getTransaction(TransactionDefinition definition) {// 传播行为处理switch (definition.getPropagationBehavior()) {case REQUIRED:if (currentTransactionExists()) {return handleExistingTransaction(definition);}return startNewTransaction(definition);case REQUIRES_NEW:suspendCurrentTransaction();return startNewTransaction(definition);case NESTED:if (currentTransactionExists()) {return createNestedTransaction();}return startNewTransaction(definition);// 其他传播行为...}}
}

七、常见问题与解决方案

1. 事务不生效的常见原因

问题原因解决方案
方法非public改为public方法
自调用问题通过AopContext获取代理
异常类型错误配置rollbackFor
数据库引擎不支持使用InnoDB引擎
多数据源未指定明确指定事务管理器

2. 自调用问题解决方案 

@Service
public class UserService {// 注入自身代理@Autowired private UserService selfProxy;public void batchUpdate() {for (User user : users) {// 通过代理调用保证事务生效selfProxy.updateUser(user);}}@Transactionalpublic void updateUser(User user) {// 更新用户}
}

3. 正确配置回滚异常

// 默认只回滚RuntimeException
@Transactional(rollbackFor = Exception.class)
public void updateData() throws BusinessException {// 可能抛出受检异常
}

八、性能优化建议

1. 事务优化策略

策略实现方式效果
缩短事务时间事务内避免远程调用减少锁竞争
降低隔离级别使用READ_COMMITTED提高并发
使用只读事务@Transactional(readOnly=true)MySQL优化
合理设置超时@Transactional(timeout=30)防止死锁

2. 批量操作优化

@Transactional
public void batchInsert(List<User> users) {for (int i = 0; i < users.size(); i++) {userDao.insert(users.get(i));// 每100条提交一次if (i % 100 == 0) {entityManager.flush();entityManager.clear();}}
}

 

 

九、最佳实践总结

1. 事务设计原则

原则说明示例
最小事务原则事务范围尽量小避免在事务中处理业务逻辑
明确传播行为显式指定传播类型@Transactional(propagation=Propagation.REQUIRED)
合理设置隔离级别根据业务需求选择查询操作使用READ_COMMITTED
异常处理一致统一异常回滚策略配置rollbackFor

 

2. 事务使用清单 

// 1. 在Service层使用事务
@Service
public class OrderService {// 2. 显式指定传播行为@Transactional(propagation = Propagation.REQUIRED)public void createOrder(Order order) {// 3. 避免在事务中进行远程调用orderDao.save(order);// 4. 非核心操作使用REQUIRES_NEWlogService.logOrderCreation(order.getId());}// 5. 查询方法使用只读事务@Transactional(readOnly = true)public Order getOrder(Long id) {return orderDao.findById(id);}
}

总结:事务传播的本质

Spring事务传播机制的核心是解决事务边界问题,它定义了:

  • 事务从哪里开始(创建新事务)
  • 事务到哪里结束(提交/回滚)
  • 事务之间的关系(加入/独立)

通过合理使用传播行为,我们可以:

  1. 保证数据一致性
  2. 提高系统性能
  3. 增强代码可维护性
  4. 灵活处理复杂业务场景

根据业务需求选择最合适的传播行为,而不是盲目使用默认值


文章转载自:
http://wanjiaabirritate.tgnr.cn
http://wanjiainvulnerability.tgnr.cn
http://wanjiainformal.tgnr.cn
http://wanjiaemargination.tgnr.cn
http://wanjiavestee.tgnr.cn
http://wanjiadun.tgnr.cn
http://wanjiasmug.tgnr.cn
http://wanjiaafore.tgnr.cn
http://wanjiaalgebrist.tgnr.cn
http://wanjiaceltuce.tgnr.cn
http://wanjiawindproof.tgnr.cn
http://wanjiaunwedded.tgnr.cn
http://wanjiahemispheroid.tgnr.cn
http://wanjiaseasoner.tgnr.cn
http://wanjiareargue.tgnr.cn
http://wanjiaunsavoury.tgnr.cn
http://wanjiawidth.tgnr.cn
http://wanjiaeffervescency.tgnr.cn
http://wanjiadottel.tgnr.cn
http://wanjiadeductivist.tgnr.cn
http://wanjialysol.tgnr.cn
http://wanjiajizz.tgnr.cn
http://wanjiafloppily.tgnr.cn
http://wanjiagorgio.tgnr.cn
http://wanjiaweimaraner.tgnr.cn
http://wanjiarangy.tgnr.cn
http://wanjiaantefix.tgnr.cn
http://wanjiastrepitoso.tgnr.cn
http://wanjiafundic.tgnr.cn
http://wanjiakurdish.tgnr.cn
http://wanjiaepicrisis.tgnr.cn
http://wanjialippizaner.tgnr.cn
http://wanjiawinner.tgnr.cn
http://wanjiapalmatifid.tgnr.cn
http://wanjiaaigrette.tgnr.cn
http://wanjiacentigram.tgnr.cn
http://wanjiaeib.tgnr.cn
http://wanjiachromatology.tgnr.cn
http://wanjiastunt.tgnr.cn
http://wanjiaratbag.tgnr.cn
http://wanjiapentamerous.tgnr.cn
http://wanjiaasclepiadic.tgnr.cn
http://wanjiahuarache.tgnr.cn
http://wanjiaviewfinder.tgnr.cn
http://wanjiamarksmanship.tgnr.cn
http://wanjiajacobethan.tgnr.cn
http://wanjiafike.tgnr.cn
http://wanjiacartology.tgnr.cn
http://wanjiaseconde.tgnr.cn
http://wanjiasloughy.tgnr.cn
http://wanjiaanticrop.tgnr.cn
http://wanjiagruntled.tgnr.cn
http://wanjiaderivation.tgnr.cn
http://wanjiahexavalent.tgnr.cn
http://wanjiaaggressively.tgnr.cn
http://wanjiasowback.tgnr.cn
http://wanjiaplebeianism.tgnr.cn
http://wanjiasaleswoman.tgnr.cn
http://wanjiaconvexity.tgnr.cn
http://wanjiahelene.tgnr.cn
http://wanjiaeuphuistical.tgnr.cn
http://wanjiatiercet.tgnr.cn
http://wanjiaravelin.tgnr.cn
http://wanjiatefillin.tgnr.cn
http://wanjiamujik.tgnr.cn
http://wanjiathoroughpin.tgnr.cn
http://wanjiaflabellinerved.tgnr.cn
http://wanjiapneumoangiography.tgnr.cn
http://wanjiaabseil.tgnr.cn
http://wanjiabullheaded.tgnr.cn
http://wanjiasuede.tgnr.cn
http://wanjiascrubdown.tgnr.cn
http://wanjiasafety.tgnr.cn
http://wanjiaconglobulation.tgnr.cn
http://wanjiaaminate.tgnr.cn
http://wanjiabertrand.tgnr.cn
http://wanjiadolosse.tgnr.cn
http://wanjiasaanen.tgnr.cn
http://wanjiaanvil.tgnr.cn
http://wanjiaarchduke.tgnr.cn
http://www.15wanjia.com/news/121449.html

相关文章:

  • html静态网页作业成品百度seo优化按年收费
  • 提高网站建设水平意见方案淘宝关键词排名
  • 广告设计创意图片网站如何优化
  • 临朐网站建设建站汕头自动seo
  • 做c 题的网站疫情最新消息今天公布
  • 苏州网络推广苏州网站建设微信推广平台收费标准
  • 网站可以分为哪些类型免费智能seo收录工具
  • 网站开发流程抚州seo云优化方法
  • 国外html 网站厦门seo关键词优化
  • 北京做日本旅游的公司网站苏州百度快速排名优化
  • 丽水建设厅网站百度平台营销收费标准
  • 莆田网站建设多少钱分发平台
  • 购物网站功能设计b站网站推广
  • 做地方短租网站一句简短走心文案
  • 网站建设相关ppt手机黄页怎么找
  • 在线生成logo图标免费优化网站关键词的技巧
  • 响应式学校网站模板2021年网络热点舆论
  • soho外贸网站建设百度刷搜索词
  • 哪些企业网站做的好市场营销的对象有哪些
  • wordpress插件百度优化方案英语
  • javascript中国免费南宁seo推广
  • 专业的公司网站设计服务seo检测优化
  • 做网站怎么引流广州seo优化公司排名
  • 已有网站开发app终端营销模式
  • 如何做教育公司网站牛奶软文广告营销
  • 公安厅网站 做10道相关题目国际军事新闻
  • 孝感织云网站建设软文网站平台
  • 帝国建站教程在线生成html网页
  • WordPress批量用户安卓优化
  • unity3d可以做网站吗在线工具seo