Come posso impostareQueryTimeout su SimpleJdbcTemplate?
-
05-07-2019 - |
Domanda
Spring Framework ha due classi simili: JdbcTemplate è la vecchia, la classe Java 1.4 e SimpleJdbcTemplate è la più recente, con metodi più belli.
JdbcTemplate ha un metodo setQueryTimeout , che in pratica mi dà accesso a un metodo con lo stesso nome sull'oggetto Statement sottostante.
Esiste un modo per fare qualcosa di simile con un SimpleJdbcTemplate ?
Soluzione : in base alla risposta di skaffman, creo l'oggetto SimpleJdbcTemplate
da un JdbcTemplate
, quindi ora posso fare quello che voglio. Codice:
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);
Un po 'di bocca piena, ma ottiene il lavoro fatto.
Aggiorna : questo è davvero più complicato del necessario. Vedi la risposta.
Soluzione
SimpleJdbcTemplat
e non è un sostituto di JdbcTemplate
, è solo un supplemento compatibile con java5, per alcune operazioni che possono trarre il massimo vantaggio da varargs e generici.
Se guardi l'origine di SimpleJdbcTemplate
, vedrai che delega tutto il suo lavoro a un oggetto JdbcTemplate
, e quindi impostando il timeout (o le altre opzioni) su JdbcTemplate
, le imposti implicitamente anche su SimpleJdbcTemplate
.
Se stai ottenendo il SimpleJdbcTemplate
tramite SimpleJdbcDaoSupport.getSimpleJdbcTemplate ()
, il JdbcTemplate
sarà già cablato correttamente.
modifica:
Ad esempio:
public class MyDao extends SimpleJdbcDaoSupport {
public void doStuff() {
getJdbcTemplate().setQueryTimeout(x);
getSimpleJdbcTemplate().execute(...);
}
}
SimpleJdbcTemplate contiene lo stesso JdbcTemplate recuperato da getJdbcTemplate ().
Se non si estende SimpleJdbcDaoSupport, quindi sì, è necessario costruire manualmente un SimpleJdbcTemplate.