¿Cómo configuro QueryTimeout en SimpleJdbcTemplate?
-
05-07-2019 - |
Pregunta
Spring Framework tiene dos clases similares: JdbcTemplate es la antigua clase Java 1.4 y SimpleJdbcTemplate es más reciente, con métodos más agradables.
JdbcTemplate tiene un método setQueryTimeout , que básicamente me da acceso a un método con el mismo nombre en el objeto Statement subyacente.
¿Hay alguna manera de hacer algo similar con un SimpleJdbcTemplate ?
Solución : Basándome en la respuesta de Skaffman, creo el objeto SimpleJdbcTemplate
a partir de un JdbcTemplate
, así que ahora puedo hacer lo que quiera. Código:
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);
Un poco de un bocado, pero hace el trabajo.
Actualización : Esto es más complicado de lo necesario. Ver la respuesta.
Solución
SimpleJdbcTemplat
e no es un sustituto de JdbcTemplate
, es solo un complemento compatible con java5, para ciertas operaciones que pueden aprovechar mejor los varargs y los genéricos.
Si mira la fuente de SimpleJdbcTemplate
, verá que delega todo su trabajo a un objeto JdbcTemplate
, y así establece el tiempo de espera (o las otras opciones) en JdbcTemplate
, también las configura implícitamente en SimpleJdbcTemplate
también.
Si está obteniendo el SimpleJdbcTemplate
a través de SimpleJdbcDaoSupport.getSimpleJdbcTemplate ()
, entonces el JdbcTemplate
ya se habrá conectado correctamente.
editar:
Por ejemplo:
public class MyDao extends SimpleJdbcDaoSupport {
public void doStuff() {
getJdbcTemplate().setQueryTimeout(x);
getSimpleJdbcTemplate().execute(...);
}
}
SimpleJdbcTemplate contiene la misma JdbcTemplate que recupera getJdbcTemplate ().
Si no extiendes SimpleJdbcDaoSupport, entonces sí, debes construir manualmente una plantilla SimpleJdbc.