如何在SimpleJdbcTemplate上设置QueryTimeout?
-
05-07-2019 - |
题
Spring Framework有两个类似的类:JdbcTemplate是旧的Java 1.4类,而SimpleJdbcTemplate是更新的,有更好的方法。
JdbcTemplate有一个方法 setQueryTimeout ,它基本上允许我访问基础Statement对象上具有相同名称的方法。
有没有办法用 SimpleJdbcTemplate ?
解决方案:根据skaffman的回答,我自己从 JdbcTemplate
创建了 SimpleJdbcTemplate
对象,所以现在我可以做任何我想做的事。代码:
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);
有点满口,但完成了工作。
更新:这确实比必要的更复杂。看到答案。
解决方案
SimpleJdbcTemplat
e不是 JdbcTemplate
的替代品,它只是一个java5友好的补充,对于某些可以充分利用varargs和泛型的操作。
如果查看 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。
不隶属于 StackOverflow