事务场景:需要做一个跑批进行一个流程的实现,0.获取异常数据(多条),for循环对单条数据进行下面三个操作:1).调用别的系统进行查询,2).查询自己的库中数据,3)更改自己数据库中的数据状态。此时就需要对单条数据操作的3步骤进行事务控制,使用的过程中发现两个解决办法:第一:在controller层进数据的获取,for循环处理单条数据时调用service层进行事务的控制.第二:在service层进行事务的手动提交和回滚。(for循环需要注意:事务的开启需要在for循环中,否则会报多次提交事务:do not commit or rollback more than once per transaction)
下面贴代码:第一种:在controller层进数据的获取,for循环处理单条数据时调用service层进行事务的控制、
@Controller
public class TestController {
@Resource
private IClearNoUnfreezeBs iClearNoUnfreezeBs;
//逻辑放到controller中,service进行事务控制start
@RequestMapping("/freeze")
public void testfreeze() throws Exception{
try {
//1.取数据
ist<String> policyList1 = iClearNoUnfreezeBs.getunfreezedate();
//2.for循环处理每条数据
for (String policyno : policyList1) {
n++;
try {
//需要进行事务控制的放到service层进行处理
iClearNoUnfreezeBs.bs_clearNoUnfreeze( policyno,n );
} catch (Exception e) {
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
第二:在service层进行事务的手动提交和回滚
@Service
public class ClearNoUnfreezeBs implements IClearNoUnfreezeBs {
private static