当前位置: 首页 > 面试题库 >

春季-事务只读

耿敏达
2023-03-14
问题内容

只需要您对Spring声明式事务管理的专家意见。这是我的设置:

  1. DAO层是使用Spring JdbcTemplate的普通JDBC(没有Hibernate等)
  2. 服务层是具有声明式事务的POJO,如下所示- save*, readonly = false, rollback for Throwable

通过上述设置,一切正常。但是,当我说时get*, readonly = true,我在日志文件中看到错误消息Database connection cannot be marked as readonly。对于服务层中的所有get *方法,都会发生这种情况。

现在我的问题是:

答:我必须设置get*为只读吗?我所有的get*方法都是纯读取DB操作。我不希望在任何事务上下文中运行它们。上述错误有多严重?

B.删除get*配置时,看不到错误。而且,我所有的简单get*操作都无需交易。这是要走的路吗?

C.为什么有人要在哪里拥有交易方法readonly = true?此配置有任何实际意义吗?

谢谢!与往常一样,非常感谢您的回复!


问题答案:

该帖子告诉您,该行为或readOnly标志是与持久性机制相关的。

C. 是的,使用休眠模式时,通过将刷新模式设置为FLUSH_NEVER(如链接文章中所述),可以提高性能。

B. 是的,JDBC调用不需要事务(休眠需要一个),因此删除@Transactional配置会修剪所有事务管理。

答: 我假设spring正在调用,connection.setReadOnly(true)但是您的JDBC驱动程序不支持此功能

底线是:不要将readonly事务与纯JDBC一起使用。

还有一件事-事务应该跨越 多个
查询。不要使您的交易粒度太细。使它们成为工作单元。



 类似资料:
  • 问题内容: 我正在建立一个新的JPA + Spring项目。(对于我来说,作为程序员)之间的区别是什么? 和 在我的applicationContext.xml中? 问题答案: 代理和字节码编织方面之间存在巨大差异。代理只能在调用来自“外层空间”的情况下进行拦截,而不能在调用来自对象本身的情况下进行拦截(this.transactionalMethod()) 这意味着,如果您有一个带有两个方法T和

  • 问题内容: 我有一个Java应用程序,它从主类开始(不是Spring Boot应用程序)。而且我想使用Spring retry在连接丢失时重试。据我所知,我需要在Spring应用程序的主类之上添加@EnableRetry批注,然后在我的方法之上使用@Retryable进行重试。但是我认为这在非​​Spring应用程序中将不起作用。是否可以在简单的Java应用程序(而非spring应用程序)中使用s

  • 问题内容: 我如何让Spring从中加载Hibernate的属性? 我们正在使用Spring和JPA(以Hibernate作为实现)。Spring 指定了JPA语言和Hibernate属性: 在这种配置中,Spring通过applicationContext.xml读取所有的Hibernate属性。当我创建一个(位于我的类路径的根目录,与META- INF处于同一级别)时,Hibernate根本不

  • 问题内容: 有人可以用简单的术语解释ProxyFactoryBean吗? 我看到很多地方都引用了它。 问题答案: 用于将拦截器逻辑应用于现有目标Bean,以便在调用该Bean上的方法时,拦截器在该方法调用之前和之后执行。这是面向方面的编程(AOP)的示例。 最好用一个简单的例子来解释。AOP的经典用例是将缓存应用于方法调用的结果。可以使用以下方式进行连接: 我们有一个类型为bean 的类型,它实现

  • 问题内容: 总的来说,我对Web上的Spring和Java还是很陌生,但是周末我一直在为此苦苦挣扎。将所有配置整合在一起并使Spring在IntelliJ上与gradle一起使用是一个挑战。 我正在尝试在Spring中实施另一个项目,以便更好地了解如何使用它。 我整个上午都在收到此错误,并且在Spring上浏览了许多参考资料和指南,但看不到问题出在哪里。 由以下原因引起:org.springfra

  • 问题内容: 我正在使用hibernate处理spring项目,并希望使用ehcache实现二级缓存。我看到了许多解决方法: 引入注释 一个旨在成为继任者的工具集。 可以很好地集成到休眠本身中,以使用例如注释进行缓存。 使用代理。基于注释的配置迅速变得有限或复杂(例如,注释嵌套的多个级别) 就我个人而言,我认为还不够彻底,因此我可能更愿意考虑发展得更为积极。尽管这似乎是最完整的实现(例如,读取和写入