2017-07-27 7 views
0

Iは注入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も完全に同期してブロックしているため、フードの下でスレッドマジックが発生しません。

関連する問題