Spring手动提交事物
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。至于ApplicationContext.xml这个配置文件部署在哪,如何配置多个xml文件,书上都没怎么详细说明。现在的方法就是查
·
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。至于ApplicationContext.xml这个配置文件部署在哪,如何配置多个xml文件,书上都没怎么详细说明。现在的方法就是查看它的API文档。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。看看它的API说明
//通过ContextLoader获取WebApplicationContext
WebApplicationContext contextLoader = ContextLoader.getCurrentWebApplicationContext();//设置属性的默认属性
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
//设置事务的传播行为,此处是设置为开启一个新事物
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
//设置事务的隔离级别,此处是读已经提交
definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
for(int i=1;i<=pageCount;i++){
/*if(i == 2){
int j = 1/0;
}*/
//从spring容器对象中获取DataSourceTransactionManager,这个根据配置文件中配置的id名(transactionManager)
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) contextLoader.getBean("transactionManager");
//获取事务状态对象
TransactionStatus transactionStatus = (TransactionStatus) transactionManager.getTransaction(definition);
try{
int offset = (i-1)*pageSize;
orderVo.setOffset(offset);
List<OrderTemp> list = this.orderTempMapper.grabYiHaoDianTempOrderToOrder(orderVo);
for (OrderTemp orderTemp : list) {
//临时表中的状态是异步时才能导入到订单表中
if(orderTempConstants.OR_STATUS_ASYN.equals(orderTemp.getOrStatus())){
if(judgeOrOrderNum(orderTemp.getOrNum(),orderTemp.getElactPlatId()) == null){
createOrder(orderTemp,platAssoMap,dcBranchIdMap,userId);
}/*else{
Order order = judgeOrOrderNum(orderTemp.getOrNum(),orderTemp.getElactPlatId());
updateOrder(orderTemp, platAssoMap, dcBranchIdMap, userId, order);
}*/
}
}
//状态刷新
transactionStatus.flush();
//事物提交
}catch(Exception e){
//异常回滚
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)