簡體   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