与Spring和Hibernate长期交易? - java

我要解决的根本问题是运行一个任务,该任务在MySQL中生成多个临时表,这些临时表需要保留足够长的时间,以便在创建Java之后从Java中获取结果。由于涉及的数据量很大,因此必须分批完成任务。每个批处理都是对通过JDBC调用的存储过程的调用。对于大型数据集,整个过程可能需要半小时或更长时间。

为了确保对临时表的访问,我在一个带有TransactionCallbackWithoutResult的Spring事务中运行了整个任务,从头开始完成。否则,我可能会获得一个无法访问临时表的其他连接(在我将所有内容包装在事务中之前,这种连接有时会发生)。

在我的开发环境中,这很好用。但是,在生产中,我遇到以下异常:

java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

当我的长期事务执行期间另一个任务试图访问某些相同的表时,就会发生这种情况。令我感到困惑的是,长时间运行的事务仅向临时表中插入或更新。只能选择非临时表的所有访问权限。从我可以找到的文档中,在这种情况下,默认的Spring事务隔离级别不应导致MySQL阻塞。

所以我的第一个问题是,这是正确的方法吗?是否可以确保通过Hibernate模板反复获得相同的连接而无需长时间运行事务?

如果长期运行的交易方法是正确的,那么我应该在隔离级别方面检查什么?我的理解正确吗,Spring / MySQL事务中的默认隔离级别不应锁定只能通过select访问的表?我该如何调试导致冲突的表,并防止这些表被事务锁定?

参考方案

我认为延长交易时间是邪恶的。在我的职业生涯中,“扩展”的定义已从几秒降至几毫秒。

它是不可重复的问题和令人头疼的问题的无止境源。

在这种情况下,我会忍无可忍,并在软件中保留一个“工作日志”,如果批处理失败,您可以反向回放以进行清理。

Spring MVC中的输入验证 - java

我知道Commons Validator框架是Struts项目在服务器端和客户端验证输入值的事实上的标准。Spring MVC项目是否也是如此?我得到的印象可能不是,大多数Struts书籍和论坛都谈论Commons Validator框架,但是只有少数Spring书籍和论坛可以。在Spring MVC项目中验证输入的最佳实践是什么?干杯! 参考方案 在引入S…

Java:“自动装配”继承与依赖注入 - java

Improve this question 我通常以常见的简单形式使用Spring框架: 控制器服务存储库通常,我会在CommonService类中放一个通用服务,并使所有其他服务扩展到类中。一个开发人员告诉我,最好在每个服务中插入CommonClass而不是使用继承。我的问题是,有一个方法比另一个更好吗? JVM或性能是否会受到另一个影响?更新资料Comm…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…