博客
关于我
Spring中基于XML的声明式事务控制
阅读量:686 次
发布时间:2019-03-17

本文共 2918 字,大约阅读时间需要 9 分钟。

Spring中基于XML的声明式事务控制配置详细指南

在Spring框架中,基于XML 的声明式事务控制是一个体现Spring强大配置能力的重要特点。以下将详细介绍如何在Spring应用中配置基于XML的声明式事务控制。

1. 配置事务管理器

首先,需要在项目的Spring配置文件中添加一个配置bean,用于创建事务管理器。以下是一个典型的配置示例:

这里,DataSourceTransactionManager需要一个数据源作为决策器。数据源通常使用spring:jdbc中的DriverManagerDataSource配置。

2. 配置事务的通知

接下来,需要定义一个通用的事务通知,其作用是捕捉方法前后进行事务开始和提交、回滚操作。可以参考以下配置:

此外,还可以根据具体需求添加事务的隔离级别、超时设置等属性:

3. 配置切入点表达式

在Spring AOP中,需要定义一个通用的切入点表达式,以便为特定的方法或类方法创建事务通知。例如:

这里,execution(* com.qublog.service.impl.*.*(..)) 定义了一个切入点,表示所有在com.qublog.service.impl包下定义的方法都会被Spring的AOP拦截并应用事务通知。

4. 业务逻辑类与事务集成

在业务逻辑实现类中,通常会在需要事务支持的方法上使用事务注解。例如:

@Repository
public class AccountServiceImpl implements AccountService {
// 用@Autowired注入数据源
private DataSource dataSource;
// 已经注入的事务管理器
private TransactionManager transactionManager;
public void transfer(String sourceName, String targetName, Float money) throws Exception {
System.out.println("开始转账...");
// 获取转出账户
Account sourceAccount = findAccountByName(sourceName);
// 获取转入账户
Account targetAccount = findAccountByName(targetName);
// 修改转出账户金额
sourceAccount.setMoney(sourceAccount.getMoney() - money);
// 修改转入账户金额
targetAccount.setMoney(targetAccount.getMoney() + money);
// 提交事务
transactionManager.beginTransaction();
try {
AccountDaoume updateAccount(sourceAccount);
System.out.println("更新转出账户成功...");
AccountDaoume updateAccount(targetAccount);
System.out.println("更新转入账户成功...");
} catch (Exception e) {
System.out.println("事务回滚...");
transactionManager.rollback();
throw e;
} finally {
transactionManagercommit();
}
}
}

5. 数据源配置

确保在bean.xml中已正确配置数据源。以下是一个常用的配置示例:

6. 完整示例配置(bean.xml

以下是一个简化的bean.xml示例,包含了上述配置:

7. 测试类

测试类可以使用Spring Boot测试框架进行单元测试。例如:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ContextConfiguration(locations = "classpath:bean.xml")
public class AccountServiceTest {
@Autowired
private AccountService accountService;
@Autowired
private ApplicationContext applicationContext;
@Test
public void testTransfer() {
accountService.transfer("aaa", "bbb", 100f);
System.out.println("测试通过!");
}
@Test
public void testFindByname() {
Account account = accountService.findAccountById(1);
System.out.println(account);
}
}

以上配置和相关代码,便利于在Spring应用中实现基于XML的声明式事务控制。

转载地址:http://jfchz.baihongyu.com/

你可能感兴趣的文章
netlink2.6.32内核实现源码
查看>>
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
NetScaler的常用配置
查看>>
netsh advfirewall
查看>>
NETSH WINSOCK RESET这条命令的含义和作用?
查看>>
Netty WebSocket客户端
查看>>
netty 主要组件+黏包半包+rpc框架+源码透析
查看>>
Netty 异步任务调度与异步线程池
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
Netty事件注册机制深入解析
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty客户端断线重连实现及问题思考
查看>>
Netty工作笔记0006---NIO的Buffer说明
查看>>
Netty工作笔记0007---NIO的三大核心组件关系
查看>>
Netty工作笔记0011---Channel应用案例2
查看>>
Netty工作笔记0013---Channel应用案例4Copy图片
查看>>
Netty工作笔记0014---Buffer类型化和只读
查看>>
Netty工作笔记0020---Selectionkey在NIO体系
查看>>
Vue踩坑笔记 - 关于vue静态资源引入的问题
查看>>
Netty工作笔记0025---SocketChannel API
查看>>