2017-07-27 85 views
0

我有一個注入JDBCTemplate實例,代碼主要執行Spring 4.1.6 JdbcTemplate阻塞和同步?

private JdbcTemplate template; 

public OutputType getOutput(InputType input) { 
    CallType call = new CallType(input); 
    CallbackType callback = new CallbackType(input); 

    OutputType output = (OutputType) template.execute(call, callback); 
    ... 
} 

我承擔execute方法實際上連接到數據庫並檢索結果。但是,我無法從文檔中找出控制流程是如何工作的。

是從execute阻擋(螺紋佔據CPU芯的整個時間等待數據庫響應)的響應?它是同步的,但沒有阻塞(即線程休眠/不安排,直到響應就緒)?它是異步的(execute立即返回,但輸出不完整/空,所有數據庫處理邏輯都在回調中)?

我已經使用了幾個不同的數據庫,所以我不確定在JdbcTemplate中實際發生了什麼。如果我的術語不正確,請告訴我。謝謝!

回答

1

JDBC協議本身是同步的,阻擋 - 它會阻止在套接字I/O等待數據庫響應。雖然這並不意味着你不能異步調用JDBC提供商(手動生成一個單獨的線程,使用演員等),數據庫的實際連接將始終是同步的。

JDBCTemplate也是完全同步和阻塞,沒有線程魔法罩下回事。