关于取消的spring 的事务管理

本文内容纲要:关于取消的spring 的事务管理

关于取消的spring 的事务管理

工作上有个需求,读取一个excel表的数据,并存入数据库,但是有一个问题,每跳数据都是与其他数据有关联的,简单的说就是,每插入一条时就会与数据库其他的数据比较,然后进行一些操作,所以一旦事务没提交,数据库的数据就没有真正的插入进去,插入时数据肯定是不正确的。

正确的思路就是取消事务,即在方法上写一个注解 @Transactional(propagation=Propagation.NOT_SUPPORTED) 不开启事务

@Transactional(propagation=Propagation.NOT_SUPPORTED)

public String uploadExcel(InputStream inputXLS,String fitemId) throws Exception{

....

}

但是过了一段时间,出现问题了,不起作用了,发现有可能是 web.xml 中的配置影响到了(大神的猜测),由于这里又不能改,只好想其他的方法

<filter>

<filter-name>lazyLoadingFilter</filter-name>

<filter-class>

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

</filter>

最后在网上找了一个解决方案

resourcePriceDao.saveOrUpdate(rp);

resourcePriceDao.getSessionFactory().getCurrentSession().flush();

每次保存后。调用当前的session的flush()方法强制与数据库同步,当然这样做会稍微影响效率,但需求是解决了。

如果有什么更好的解决方案可以讨论下

一下是一些在网上找的关于事务的处理

@Transactional(propagation=Propagation.REQUIRED)//如果有事务,那么加入事务,没有的话新创建一个

@Transactional(propagation=Propagation.NOT_SUPPORTED)//这个方法不开启事务

@Transactional(propagation=Propagation.REQUIREDS_NEW)//不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务

@Transactional(propagation=Propagation.MANDATORY)//必须在一个已有的事务中执行,否则抛出异常

@Transactional(propagation=Propagation.NEVER)//不能在一个事务中执行,就是当前必须没有事务,否则抛出异常

@Transactional(propagation=Propagation.SUPPORTS)//其他bean调用这个方法,如果在其他bean中声明了事务,就是用事务。没有声明,就不用事务。

@Transactional(propagation=Propagation.NESTED)//如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动的事务,则按照REQUIRED属性执行,它使用一个单独的事务。这个书屋拥有多个回滚的保存点,内部事务的回滚不会对外部事务造成影响,它只对DataSource TransactionManager事务管理器起效。

@Transactional(propagation=Propagation.REQUIRED,readOnly=true)//只读,不能更新,删除

@Transactional(propagation=Propagation.REQUIRED,timeout=30)//超时30秒

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)//数据库隔离级别

本文内容总结:关于取消的spring 的事务管理

原文链接:https://www.cnblogs.com/qiuyuedong/p/4701224.html

以上是 关于取消的spring 的事务管理 的全部内容, 来源链接: utcz.com/z/362735.html

回到顶部