[英]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.