gpt4 book ai didi

java - 停止 Java 时不执行存储过程

转载 作者:行者123 更新时间:2023-11-30 05:21:27 25 4
gpt4 key购买 nike

我在 MySQL 中创建了一个存储过程,并使用 JPA EclipseLink 从 Java 应用程序中调用它。一旦调用该过程,它里面就有一个“sleep(sec)”方法,然后它会成功执行某些操作,除非应用程序关闭,看起来该过程也被取消了,这不是我想要的。我尝试使用 JDBCPreparedStatements 进行同样的操作,得到相同的结果。即使应用程序在过程调用后关闭,是否有任何解决方法可以使存储过程正常工作。

存储过程

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 中。

关于java - 停止 Java 时不执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59524293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com