Spring 4.1.6 JdbcTemplate 阻塞和同步?
Spring 4.1.6 JdbcTemplate Blocking and Synchronus?
我有一个注入的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核心等待数据库响应)?它是同步的,但不是阻塞的(即线程 sleeps/is 在响应准备好之前没有调度)?是不是异步的(execute
returns 立即输出但是incomplete/null,所有的数据库处理逻辑都在回调中)?
我使用过几个不同的数据库,所以我不确定 JdbcTemplate 中实际发生了什么。如果我的术语不正确,请告诉我。谢谢!
JDBC
协议本身是同步和阻塞的 - 它会阻塞在套接字 I/O 上等待数据库响应。虽然这并不意味着您不能异步调用 JDBC
提供程序(手动生成单独的线程、使用参与者等),但与数据库的实际连接将始终是同步的。
JDBCTemplate
也是完全同步和阻塞的,底层没有线程魔法。
我有一个注入的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核心等待数据库响应)?它是同步的,但不是阻塞的(即线程 sleeps/is 在响应准备好之前没有调度)?是不是异步的(execute
returns 立即输出但是incomplete/null,所有的数据库处理逻辑都在回调中)?
我使用过几个不同的数据库,所以我不确定 JdbcTemplate 中实际发生了什么。如果我的术语不正确,请告诉我。谢谢!
JDBC
协议本身是同步和阻塞的 - 它会阻塞在套接字 I/O 上等待数据库响应。虽然这并不意味着您不能异步调用 JDBC
提供程序(手动生成单独的线程、使用参与者等),但与数据库的实际连接将始终是同步的。
JDBCTemplate
也是完全同步和阻塞的,底层没有线程魔法。