如何在 SimpleJdbcTemplate 上设置QueryTimeout?

Posted

技术标签:

【中文标题】如何在 SimpleJdbcTemplate 上设置QueryTimeout?【英文标题】:How do I setQueryTimeout on SimpleJdbcTemplate? 【发布时间】:2009-07-30 12:24:52 【问题描述】:

Spring 框架有两个相似的类:JdbcTemplate 是旧的 Java 1.4 类,而 SimpleJdbcTemplate 是较新的,具有更好的方法。

JdbcTemplate 有一个方法setQueryTimeout,它基本上让我可以访问底层 Statement 对象上同名的方法。

有没有办法用SimpleJdbcTemplate 做类似的事情?

解决方案:根据 skaffman 的回答,我自己从 JdbcTemplate 创建了 SimpleJdbcTemplate 对象,所以现在我可以为所欲为。代码:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);

有点拗口,但可以完成工作。

更新:这确实比必要的复杂。查看答案。

【问题讨论】:

可能比必要的更复杂,请参阅我编辑的答案。 查询超时的单位是多少? 【参考方案1】:

SimpleJdbcTemplate 不是 JdbcTemplate 的替代品,它只是一个对 java5 友好的补充,用于某些可以充分利用可变参数和泛型的操作。

如果您查看SimpleJdbcTemplate 的源代码,您会发现它将所有工作委托给JdbcTemplate 对象,因此通过在JdbcTemplate 上设置超时(或其他选项),您也将它们隐式设置在 SimpleJdbcTemplate 上。

如果您通过SimpleJdbcDaoSupport.getSimpleJdbcTemplate() 获得SimpleJdbcTemplate,则JdbcTemplate 已经正确连接。

编辑:

例如:

public class MyDao extends SimpleJdbcDaoSupport 
    public void doStuff() 
        getJdbcTemplate().setQueryTimeout(x);
        getSimpleJdbcTemplate().execute(...);
    

SimpleJdbcTemplate 包含与 getJdbcTemplate() 检索到的相同的 JdbcTemplate。

如果你不扩展SimpleJdbcDaoSupport,那么是的,你需要自己手动构造一个SimpleJdbcTemplate。

【讨论】:

但是我如何访问“被困”在 SimpleJdbcTemplate 中的 JdbcTemplate?我所拥有的只是访问没有 setTimeout 的 JdbcOperations 接口。想展示一些代码吗? 你没有在你的问题中提到,你问的是 SimpleJdbcTemplate。请修改您的问题以澄清您真正想要的内容。 不,我的评论不清楚。我的意思是拥有一个 SimpleJdbcTemplate 对象,我所拥有的只是 getJdbcOperations() 方法。没有getUnderlyingJdbcTemplate() 方法。

以上是关于如何在 SimpleJdbcTemplate 上设置QueryTimeout?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 查询在 JdbcTemplate 和 SimpleJdbcTemplate 中花费的时间太长

SimpleJdbcTemplate 和空参数

Java Spring Jdbc模板

jdbctemplte如何拼sql

如何在 Markdown 中设置 HTML 类属性?

Spring JDBC 与 JDBC