SpringMvc+mybatis可以很方便的设置自动事务管理,但有些时候我们就试需要获取TransactionManager,然后手动提交事务。
//获取Spring容器的对象
WebApplicationContext contextLoader = ContextLoader.getCurrentWebApplicationContext();
//设置属性的默认属性
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
//设置事务的传播行为,此处是设置为开启一个新事物
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
//设置事务的隔离级别,此处是读已经提交
definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
//从spring容器对象中获取DataSourceTransactionManager,这个根据配置文件中配置的id名(transactionManager)
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) contextLoader.getBean("transactionManager");
//获取事务状态对象
TransactionStatus transactionStatus = (TransactionStatus) transactionManager.getTransaction(definition);
//****开始对数据库操作
//从账号表中随机获取一个账号
account = registMapper.getAccountFromTbAccount();
//在该账号表中删除该账号
registMapper.deleteAccountByAccountNumber(account);
//****结束对数据库操作
//提交事务
transactionManager.commit(transactionStatus);