Tag: transaction

如何在Spring中重启死锁/锁定超时的事务?

在使用Spring(特别是Spring推荐的方法:声明式事务)时,在死锁或锁定超时exception时实现事务重启的最佳实践是什么? 谢谢, 阿萨夫

Spring – Transaction Readonly

只想获得关于Spring的声明式事务管理的专家意见。 这是我的设置: DAO层是使用Spring JdbcTemplate(No Hibernate等)的普通旧JDBC 服务层是具有声明性事务的POJO,如下所示 – save*, readonly = false, rollback for Throwable 上面的设置可以解决问题。 但是,当我说get*, readonly = true ,我在日志文件中看到错误,说Database connection cannot be marked as readonly 。 这适用于服务层中的所有get *方法。 现在我的问题是: A.我是否必须将get*设置为只读? 我所有的get*方法都是纯读取DB操作。 我不希望在任何事务上下文中运行它们。 上述错误有多严重? B.当我删除get*配置时,我没有看到错误。 而且,我所有简单的get*操作都是在没有事务的情况下执行的。 这是要走的路吗? C.为什么有人想要readonly = true事务方法? 这种配置有什么实际意义吗? 谢谢! 一如既往,非常感谢您的回复!

Spring事务:在Exception或Throwable上回滚

我想知道用它代替是否有意义 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 使用Throwable @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) 据我所知,捕捉Error将帮助我们正确行事,即使发生了非常糟糕的事情。 或者也许没有用?

在Spring Transaction JUnit测试中自动assemblyHibernate会话的正确方法

这个问题类似于前一个问题 。 我试图在我的一个Spring-JUnit-Transactional测试中@Autowire一个Hibernate Session但是我得到了这个exception: java.lang.IllegalStateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional … 这是我的JUnit类: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={“/applicationContext.xml”}) @TransactionConfiguration(transactionManager=”transactionManager”) @Transactional public class MyTest { @Qualifier(“session”) @Autowired private Session session; @Test public void testSomething() { session.get(User.class, “me@here.com”); } } 如果我@Autowire一个SessionFactory并以编程方式获取我的Session (而不是在Spring XML中定义它),那么每个都可以正常工作: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={“/applicationContext.xml”}) @TransactionConfiguration(transactionManager=”transactionManager”) @Transactional public class MyTest{ @Qualifier(“sessionFactory”) @Autowired […]

Spring @Transaction没有启动事务

我正在使用Spring 3和Hibernate 3.我正在尝试配置Spring声明式事务,但无论我尝试什么,Spring事务都没有开始。 这是我的配置 文件:applicationContext-hibernate.xml … ….. 我有一个ServiceLocatorImpl类,它实现了ServiceLocator接口 @Service(“serviceLocator”) @Transactional public class ServiceLocatorImpl implements ApplicationContextAware, Serializable, ServletContextAware, ServiceLocator { public ResultObject executeService( Map objArgs ) { if(TransactionSynchronizationManager.isActualTransactionActive()) { LOGGER.debug(“ServiceLocator:executeService – Active transaction found”); } else { LOGGER.error(“No active transaction found”); } …… } …. } 在我看来,我所有的配置都是正确的。 但是,当调用executeService方法时,TransactionSynchronizationManager.isActualTransactionActive()始终返回false。 请帮我解决这个问题。 如果需要更多信息,请与我们联系。 更新:我已将ServiceLocator连接到其他类之一,如下所示: @Autowired private ServiceLocator serviceLocator; // […]

在Spring中使用事务时创建一个post提交

由于某些原因,我已经手动执行了事务提交并使用Spring PlatformTransactionManager回滚,我需要做的是设置一个钩子,以便在提交事务后进行事后提交操作。 通过观察: void commit(TransactionStatus status) throws TransactionException; 我不知道如何确定一个事务是成功的,除了假设它,所以如果不抛出任何expception。 我可以使用AOP作为一个选项,但是程序化做什么呢,也许使用回调方法?

Spring @Transactional方法 – 参与交易

在一个道具我有2个@Transactional方法。 如果我不提供任何明确的属性, 那么会发生什么,如果 我在另一个体内运行一种方法? 这两种方法都在同一个交易中运行?

Spring:注释驱动的事务管理器

我正在建立一个新的JPA + Spring项目。 有什么区别(对于我作为程序员而言): 和 在我的applicationContext.xml中?

了解Spring事务 – 当事务方法调用另一个事务方法时会发生什么?

只是为了理解Spring事务的工作原理我想知道在下面的情况下会发生什么,其中一个标记为@Transactional方法调用标记为@Transactional另一个方法。 假设配置使用所有默认设置。 @Service(“myService”) @Transactional public MyService{ public void myServiceMethod(){ myDAO.getSomeDBObjects(); } } @Repository(“myDAO”) @Transactional public MyDAOWithUsesBeyondMyService{ public void getSomeDBObjects(){…} } 现在,如果我要输入MyService.myServiceMethod()它显然会启动一个事务。 然后,在钻入myDAO.getSomeDBObjects()会发生什么? 事务已经存在的事实会导致没有新的交易产生,或者我在这里创建两个交易? 关于传播的文档(引用如下)似乎涵盖了这一点,但我想validation我的理解,这对于我的处女大脑来说有点多了解一下。 传播 :通常,在事务范围内执行的所有代码都将在该事务中运行。 但是,如果在事务上下文已存在时执行事务方法,则可以选择指定行为。 例如,代码可以继续在现有事务中运行(常见情况); 或者可以暂停现有交易并创建新交易。 Spring提供了EJB CMT熟悉的所有事务传播选项。 要了解Spring中事务传播的语义,请参见第10.5.7节“事务传播”。