Spring 4.1.6 JdbcTemplate 阻塞和同步?

Posted

技术标签:

【中文标题】Spring 4.1.6 JdbcTemplate 阻塞和同步?【英文标题】:Spring 4.1.6 JdbcTemplate Blocking and Synchronus? 【发布时间】:2017-07-27 00:05:43 【问题描述】:

我有一个注入的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 也是完全同步和阻塞的,引擎盖下没有线程魔法。

【讨论】:

以上是关于Spring 4.1.6 JdbcTemplate 阻塞和同步?的主要内容,如果未能解决你的问题,请参考以下文章

Spring--JdbcTemplate

spring boot 与 JdbcTemplate 一起工作

Spring之004: jdbcTemplate基本使用Spring实物控制

Spring JdbcTemplate+JdbcDaoSupport实例

Spring JdbcTemplate详解

Spring JdbcTemplate详解