数据库事务概念
1、问题背景
Spring事务使用场景:通过定时任务调用业务层方法。
问题描述:
1、定时任务调用service的修改人员信息的方法:
- 不使用事务
- Spring事务加到业务层被调用的方法中
使用 @Transactional(rollbackFor = Exception.class) 默认事务, 修改方法执行完成之后,事务已经提交,但是操作的表仍被锁。
解决的方式:使用 REQUIRES_NEW
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
2、code
job
import javax.annotation.Resource;
/**
* 定时任务-job
*/
@Service
@Slf4j
public class Job {
@Resource
public PersonService personServiceImpl;
@Override
public void process() {
log.info("==定时任务开始==");
updateInfo();
log.info("==定时任务结束==");
}
/**
* 修改信息
* @return
*/
public int updateInfo() {
return personServiceImpl.update();
}
}
service
import javax.annotation.Resource;
/**
* 业务层实现类
*/
public class PersonServiceImpl {
@Resource
public PersonDao personDaoImpl;
/**
* 修改信息
* @return
*/
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public int update() {
return personDaoImpl.update();
}
}