停止时存储过程不执行 Java

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.