有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
Spring提供了两种主要的事务管理方式:
声明式事务管理
声明式事务管理 是Spring的默认事务管理方式,它把事务管理代码从业务方法中分离出来,通过配置方式工作。它支持注解和XML配置两种方式。
1. 注解方式
在Java类或方法上使用 @Transactional 注解来声明性地应用事务。此注解可以作用于类定义级别或者方法级别。当作用于类级别时,表示该类下的所有public方法都具备该类型的事务属性。
示例:
@Transactional
public class TransactionalService {
public void executeAction() {
// 业务逻辑代码
}
}
2. XML方式
XML声明配置需要在Spring的配置文件中使用<tx:advice>和<aop:config>元素来配置。
示例:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* com.example.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
</aop:config>
编程式事务管理
编程式事务管理 意味着你需要在代码中管理事务。这种方式给予开发者更大的控制权,但同时也增加了代码复杂性。
Spring提供PlatformTransactionManager 接口来实现编程式事务管理,通常使用 TransactionTemplate 或直接使用 PlatformTransactionManager。
使用 TransactionTemplate
示例:
public class ProgrammaticallyTransactionalService {
private final TransactionTemplate transactionTemplate;
@Autowired
public ProgrammaticallyTransactionalService(PlatformTransactionManager transactionManager) {
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
public Object someServiceMethod() {
return transactionTemplate.execute(status -> {
// 定义事务的执行逻辑
return null;
});
}
}
使用 PlatformTransactionManager
示例:
public class ProgrammaticallyTransactionalService {
private final PlatformTransactionManager transactionManager;
@Autowired
public ProgrammaticallyTransactionalService(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
public Object someServiceMethod() {
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(definition);
try {
// 执行业务逻辑
transactionManager.commit(status);
} catch (Exception ex) {
transactionManager.rollback(status);
throw ex;
}
return null;
}
}
在这两种事务管理方式中,声明式事务管理通常是更推荐的方式,因为它将事务管理从实际的业务代码中解耦出来,减少了开发者负担并且使得代码更加清晰。
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 小朱
评论
隐私政策
0/500
滚动到此处加载评论...


