BaseServiceImpl:
spring
@Overrideide
public boolean addSubject(School school,String name) {}spa
给此方法添加事物之后 控制层action里boolean addResult = baseService.addSubject(school,subjectName);此方法不能返回值???code
spring的事务边界是在调用业务方法以前开始的,业务方法执行完毕以后来执行commit or rollback(Spring默认取决因而否抛出runtime异常).
若是抛出runtime exception 并在你的业务方法中没有catch到的话,事务会回滚。
通常不须要在业务方法中catch异常,若是非要catch,在作完你想作的工做后(好比关闭文件等)必定要抛出runtime exception,不然spring会将你的操做commit,这样就会产生脏数据.因此你的catch代码是多此一举。事务
由此能够推知,在spring中若是某个业务方法被一个get
try { 数学
//bisiness logic code it
} catch(Exception e) { io
//handle the exception class
整个包裹起来,则这个业务方法也就等于脱离了spring事务的管理,由于没有任何异常会从业务方法中抛出!全被捕获并吞掉,致使spring异常抛出触发事务回滚策略失效。