目录
我们可以使用spring来很容易的事务进行管理,包括事务传播机制,隔离级别,超时等待等等。只需要使用注解配置即可,十分方便。注意,使用前提是在spring配置文件中开启了事务管理的功能。
我们需要在spring配置文件中配置以下内容
- <!--这里将一个DataSource注入到DataSourceTransactionManager中-->
- <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="dataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- <!--开启事务管理,id为dataSourceTransactionManager这个的类会对所以的事务进行控制-->
- <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
DataSource需要自己进行配置
如果我们的方法里面要对数据库进行操作,包含了多条语句,那么我们只需要加一个@Transcation注解即可,加在方法上,那么这个方法就是一个事务了,底层使用的就是AOP。
- @Transactional
- public void buyShop(Integer pid,Integer sid, Integer mount) {
- float price = peopleDao.getPrice(sid);
- peopleDao.updateStock(sid, mount);
- peopleDao.updateBalance(pid, mount * price);
- System.out.println("购买商品成功....");
- }
上面代码加了@Transaction注解,那么这个方法就是一个事务了

上面就是spring中的事务传播机制,可以看见有很多,但是常见的就2种,就是前2种,分别是PROPAGATION_REQUIRED和PROPAGATION_REQUIRES_NEW。下面来对这2种进行解释。我们直接在@Transaction种对事务隔离级别进行配置
- @Transactional
- public void f() {
- f1();
- f2();
- }
-
- @Transactional(propagation = Propagation.REQUIRED)
- public void f1() {
- }
-
- @Transactional(propagation = Propagation.REQUIRED)
- public void f2() {
- }
如果执行上面的f()方法,由于f(),f1(),f2()都是事务,f1(),f2()的事务传播机制都是PROPAGATION_REQUIRED,所以f1和f2就可以看作一个整体,即要么都执行成功,要么都不执行
- @Transactional
- public void f() {
- f1();
- f2();
- }
-
- @Transactional(propagation = Propagation.REQUIRES_NEW)
- public void f1() {
- }
-
- @Transactional(propagation = Propagation.REQUIRES_NEW)
- public void f2() {
- }
如果执行上面的f()方法,由于f(),f1(),f2()都是事务,f1(),f2()的事务传播机制都是PROPAGATION_REQUIRED_NEW,所以f1和f2都是一个独立个体,即f1不会影响f2,f2也不会影响f1。就算是f1执行失败,f2也会执行

在spring中,我们直接在@Transaction中配置即可

这个也很简单,就是事务在规定时间没有执行完,那么就直接rollback。执行时间也是在@Transaction中进行配置,单位是秒

我们通过timeout来进行设置,如果不设置,那么这个值就是-1

-1就是表示使用数据库默认是超时时间
事务主要是数据库的知识,这里就只说明了怎么使用。如果想要深入了解,那么就需要去查询数据库相关的资料了。