草庐IT

TRANSACTIONS

全部标签

java - 你如何重构@Transactional 方法来拆分非事务部分

我有一个作为独立Java应用程序的一部分运行的数据访问类。它目前正在工作,这意味着定义了一个事务管理器,但我想重构该类以减少事务的范围,但如果我这样做,我会得到org.hibernate.HibernateException:NoHibernateSessionboundtothread,andconfiguration不允许在此处创建非事务性,这意味着移动@Transactional以某种方式阻止了它被识别。我的原始版本的重构方法是私有(private)的,但我发现有人建议将其更改为公开的,因为在某些情况下注释不会被提取。publicclassDoStuff{@Transaction

java - Spring 事务中 REQUIRES_NEW 和 NESTED 传播行为的差异

前言首先:它不是Differencesbetweenrequires_newandnestedpropagationinSpringtransactions的副本-我读了它,但没有找到我的问题的答案问题:阅读我提到的主题后,我明白了物理交易计数中传播级别的主要区别:2dbtransactions-forREQUIRES_NEWforouterandforinnermethod1db事务-用于外部和内部方法的NESTED。如果底层数据库不支持保存点,它将无法工作但从我的观点来看,逻辑似乎是相同的。如何理解在实践中使用哪个级别?有什么用例可以理解吗?行为差异的方便示例?附言我想对于其他交易

java - Spring 和 Hibernate 的事务管理使非 Activity 事务成为可能

我正在使用Spring和Hibernate管理一个JavaWeb应用程序。我使用Spring和Hibernate工具来处理持久性级别,因此我不需要提交\回滚我的事务。该应用程序是并发的,因此用户可以修改相同的记录,我决定使用ReadCommitted作为隔离级别。问题是有时我会在日志中发现JDBC错误,并且所有下一个请求都会出现相同的错误,从而阻止应用程序行为。这些是事务管理中涉及的组件:@BeanpublicSpringLocalSessionFactoryBeansessionFactory(DataSourcedataSource){SpringLocalSessionFacto

java - 原子地写两个文件

我面临一个问题,我没有一个干净的解决方案。我正在编写一个Java应用程序,该应用程序将某些数据存储在一组有限的文件中。我们没有使用任何数据库,只是普通文件。由于某些用户触发的操作,某些文件需要更改。我需要这是一个全有或全无的操作。也就是说,要么更新所有文件,要么一个都不更新。例如,如果5个文件中的2个被更改,而其他3个不是由于某些IOException而发生更改,那将是灾难性的。实现此目标的最佳策略是什么?嵌入内存数据库(如hsqldb)是获得这种原子性/事务行为的充分理由吗?非常感谢! 最佳答案 IMO的安全方法是:备份维护已处理

java - Spring 管理事务、EclipseLink JPA、自定义隔离级别

我怀疑这个很尴尬,我做错了很糟糕,但请耐心等待。我有一个带有Spring管理的事务的Spring应用程序。它使用EclipseLinkJPA。我有一个执行findByNativeQuery()后跟merge()的方法。我需要在真正的串行事务隔离级别中发生这种情况。我尝试添加@Transactional(isolation=Isolation.SERIALIZABLE)这不起作用,因为org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect#beginTransaction不支持任何事务隔离级别,但默认。因此,我尝试进入Elcips

java - 如何在 DDD 中管理域逻辑和事件之间的事务?

我正在研究DDD和事件源中的编程。我看到一个示例,当调用域逻辑(例如Order.placeOrder())时,它会发布一个事件(例如OrderPlaced)。并且该事件将作为事件存储发送到MQ。域逻辑(Order.placeOrder())应该是一个原子API,如果使用Spring作为事务管理器,它应该有@Transactional注释。现在我的问题是:如何确保数据库更改和事件发送在同一个事务中?即,如果在将数据提交到数据库时出现任何错误,则事件永远不会发送到MQ。我知道有像XA或2阶段提交这样的解决方案来强制数据库更新并在同一事务中发送MQ消息。但现在似乎并没有被广泛使用。如果还是用

java - Spring 中的事务原子性

SQL/Spring中的事务原子性是什么意思,什么不是?我正在考虑以下情况。如果我错了请纠正我:此代码不正确:@TransactionalpublicvoidvoteUp(longfooId){Foofoo=fooMapper.select(fooId);//SELECT*FROMfooWHEREfooId==#{fooId}foo.setVotes(foo.getVotes()+1);fooMapper.update(foo);//UPDATEfooSETvotes=#{votes}(...)WHEREfooId==#{fooId}}尽管它是事务性的,但如果在多台机器/多线程中同时调

java - Spring TransactionManager - 提交不起作用

我正在尝试创建基于Spring的解决方案,以便在MySQL5.5服务器上运行批处理SQL查询。“查询”是指任何编译的SQL语句,因此SQL批处理作业可以包含例如多个CREATETABLE、DELETE和INSERT语句。我正在使用SpringBatch以此目的。我有transactionManager配置如下。和数据源:我的DAO类配置了方法@Transactional(propagation=Propagation.REQUIRES_NEW)然后我遍历SQL语句的集合,一次使用单个SQL语句调用该方法。方法内部的处理很简单:simpleJdbcTemplate.getJdbcOper

java - Hibernate session.getTransaction().begin() 与 session.beginTransaction() 之间的区别

我找不到关于这个主题的太多信息。谁能解释一下Hibernatesession.getTransaction().begin()vssession.beginTransaction()vssession之间的区别.beginTransaction().begin() 最佳答案 调用session.getTransaction().begin()没有多大意义,因为session.getTransaction()将检索已经在进行中的事务,因为它假设交易正在进行中。您基本上是在说,开始这个应该已经在进行中的交易。session.beginT

java - Spring Data CrudRepository 和事务

我正在尝试在CrudRepository接口(interface)上实现交易。我是这方面的初学者,我目前的问题是,当收到来自不同客户的大量请求时,我有时会收到重复的请求。为避免这种情况,我想在Spring中使用SQL事务及其实现,但我无法使其正常工作。这是我尝试过的方法:@Repository@EnableTransactionManagement@TransactionalpublicinterfaceApplicationPackageDaoextendsCrudRepository{/***Findifarecordexistsforthispackagename,*@param