代码之家  ›  专栏  ›  技术社区  ›  RD_WF

Spring 4.1.6 JdbcTemplate阻塞和同步?

  •  2
  • RD_WF  · 技术社区  · 7 年前

    我打了一针 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 方法实际上连接到数据库并检索结果。然而,我很难从文档中找到控制流是如何工作的。

    处决 阻塞(线程在等待数据库响应的整个时间内占用CPU内核)?它是同步的,但不是阻塞的(即线程休眠/在响应准备就绪之前不被调度)?它是异步的吗( 处决 立即返回,但输出不完整/为空,所有数据库处理逻辑都在回调中)?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Ben M    7 年前

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

    JDBCTemplate 也是完全同步和阻塞的,引擎盖下没有线程魔法。