Comment puis-je définirQueryTimeout sur SimpleJdbcTemplate?
-
05-07-2019 - |
Question
Le framework Spring a deux classes similaires: JdbcTemplate est l'ancienne classe Java 1.4 et SimpleJdbcTemplate est plus récent, avec des méthodes plus agréables.
JdbcTemplate a une méthode setQueryTimeout , qui me donne essentiellement accès à une méthode du même nom sur l'objet Statement sous-jacent.
Existe-t-il un moyen de faire quelque chose de similaire avec un SimpleJdbcTemplate ?
Solution : sur la base de la réponse de skaffman, je crée moi-même l'objet SimpleJdbcTemplate
à partir d'un JdbcTemplate
. Je peux donc faire ce que je veux. Code:
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);
Une bouchée, mais fait le travail.
Mettre à jour : il s'agit en effet d'un processus plus compliqué que nécessaire. Voir la réponse.
La solution
SimpleJdbcTemplat
e n'est pas un remplacement de JdbcTemplate
, il s'agit simplement d'un complément convivial pour java5, pour certaines opérations qui peuvent tirer le meilleur parti des variantes et des génériques.
Si vous regardez le code source de SimpleJdbcTemplate
, vous verrez qu'il délègue l'intégralité de son travail à un objet JdbcTemplate
, et donc en définissant le délai d'expiration (ou les autres options) sur JdbcTemplate
, vous les définissez implicitement sur le SimpleJdbcTemplate
également.
Si vous obtenez le SimpleJdbcTemplate
via SimpleJdbcDaoSupport.getSimpleJdbcTemplate ()
, le JdbcTemplate
aura déjà été câblé correctement.
modifier:
Par exemple:
public class MyDao extends SimpleJdbcDaoSupport {
public void doStuff() {
getJdbcTemplate().setQueryTimeout(x);
getSimpleJdbcTemplate().execute(...);
}
}
Le SimpleJdbcTemplate contient le même JdbcTemplate que celui récupéré par getJdbcTemplate ().
Si vous n’étendez pas SimpleJdbcDaoSupport, alors oui, vous devez construire manuellement un SimpleJdbcTemplate.