使用NamedParameterJdbcTemplate为每个查询设置不同的查询超时

问题描述 投票:0回答:1

我正在使用

NamedParameterJdbcTemplate
。共有三种方法,除了 SQL 查询不同之外,每种方法的作用几乎相同,例如:

public open fun method1() : String {
    val sql = "select * from func1()"
    return namedParameterJdbcTemplate.queryForObject(sql, new MapSqlParameterSource(), String::class.java)
}

public open fun method2() : String {
    val sql = "select * from func2()"
    return namedParameterJdbcTemplate.queryForObject(sql, new MapSqlParameterSource(), String::class.java)
}

public open fun method3() : String {
    val sql = "select * from func3()"
    return namedParameterJdbcTemplate.queryForObject(sql, new MapSqlParameterSource(), String::class.java)
}

我需要为执行查询设置不同的超时:第一个方法 10 秒,第二个 5 秒,等等

最好的方法是什么?

我知道有 setQueryTimeout 的东西,但它为 jdbctemplate 设置超时,并且每个查询都将使用相同的超时。

我有两种方法:

  1. 为每个需要超时的方法创建单独的 jdbc 模板
  2. 使用一个 jdbctemplate 并更改每种方法中的超时

我不知道该选什么。

也许还有其他选择。

kotlin jdbc timeout spring-jdbc jdbctemplate
1个回答
0
投票

我认为实现这一点的最佳方法是为每个查询创建一个单独的 JdbcTemplate

例如创建方法:

private fun createNamedJdbcTemplateWithTimeOut(timeoutSeconds: Int): NamedParameterJdbcTemplate {
    val template = JdbcTemplate(//your datasource//);
    template.queryTimeout = timeoutSeconds;
    return NamedParameterJdbcTemplate(template)
}

现在在您的存储库/服务类中,您可以像这样使用它:

private val jdbcTemplateWithTimeout1: NamedParameterJdbcTemplate = createNamedJdbcTemplateWithTimeOut(1)
private val jdbcTemplateWithTimeout10: NamedParameterJdbcTemplate = createNamedJdbcTemplateWithTimeOut(10)
private val jdbcTemplateWithTimeout30: NamedParameterJdbcTemplate = createNamedJdbcTemplateWithTimeOut(30)

您可以像常规 JdbcTemplate 一样在您的方法中使用它

© www.soinside.com 2019 - 2024. All rights reserved.