[英]Stored procedures doesn't execute when stopping Java
我在 MySQL 中创建了一个存储过程,并从带有 JPA EclipseLink 的 Java 应用程序中调用它。 一旦程序被调用,它里面有一个“sleep(sec)”方法,然后它会成功执行一些东西,除非应用程序被关闭,看起来程序也被取消了,这不是我想要的。 同样的事情我尝试使用 JDBC PreparedStatements,结果相同。 即使应用程序在过程调用后关闭,是否有任何解决方法可以使存储过程工作。
存储过程
DELIMITER //
DROP PROCEDURE IF EXISTS session_procedure//
CREATE PROCEDURE session_procedure
(
IN userID INT
)
BEGIN
SELECT SLEEP(30);
UPDATE users
SET users.Active = 0
WHERE users.Id = userID;
END//
DELIMITER ;
Java中的过程调用
public static void destroySessionCountdown(EntityManager entityManager, Account akk){
int accountId = akk.getId();
StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("session_procedure");
storedProcedure.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
storedProcedure.setParameter(1, accountId);
try {
storedProcedure.execute();
}catch(Exception e){
e.printStackTrace();
}
// force logout
}
我想当您关闭与数据库的连接时,与它相关的所有进程都被取消,包括此存储过程的运行调用。 我不认为你可以避免它。
您尝试实施的是一种预定作业。 我建议改用cron 。 对于您显示的简单 SQL 而不是存储过程的过程就足够了。 与延迟和执行时间相关的逻辑可以放在 shell 脚本和cron 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.