基本介绍
我们可以使用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种对事务隔离级别进行配置
PROPAGATION_REQUIRED传播机制
@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就可以看作一个整体,即要么都执行成功,要么都不执行
PROPAGATION_REQUIRES_NEW传播机制
@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就是表示使用数据库默认是超时时间
总结
事务主要是数据库的知识,这里就只说明了怎么使用。如果想要深入了解,那么就需要去查询数据库相关的资料了。