繁体   English   中英

停止 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 中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM