Spring 4.1.6 JdbcTemplate阻塞和同步?

时间:2017-07-27 00:05:43

标签: spring jdbc spring-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核心的整个时间等待数据库响应)?它是同步的,但不是阻塞的(即线程休眠/在响应准备好之前没有调度)?它是异步的(execute立即返回但是输出是不完整的/ null,所有数据库处理逻辑都在回调中)?

我使用了几个不同的数据库,因此我不确定JdbcTemplate中实际发生了什么。如果我的术语不正确,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

JDBC协议本身是同步和阻塞的 - 它将阻塞等待数据库响应的套接字I / O.虽然这并不意味着您无法异步调用JDBC提供程序(手动生成单独的线程,使用actor等),但与数据库的实际连接始终是同步的。

JDBCTemplate也是完全同步和阻止的,没有线程魔法在幕后进行。