web-dev-qa-db-fra.com

Comment obtenir l'objet de connexion actuel dans Spring JDBC

Comment puis-je obtenir l'objet Connection actuel pour une base de données Oracle? J'utilise le module JDBC dans Spring 3.0.5.

28
vlcik

Obtenez le Connection à partir du bean DataSource.

Vous pouvez accéder à la source de données en utilisant l'injection de dépendance Spring pour l'injecter dans votre bean, ou en accédant à ApplicationContext de façon statique:

DataSource ds = (DataSource)ApplicationContextProvider.getApplicationContext().getBean("dataSource");
Connection c = ds.getConnection();
26
socha23

Juste une info: j'utilise le modèle Spring JDBC, qui contient pour moi l'objet de connexion actuel, qui peut être reçu comme suit.

Connection con;
con = getJdbcTemplate().getDataSource().getConnection();
17
Arun GK

Utilisez DataSourceUtils.getConnection().

Il renvoie la connexion associée à la transaction en cours, le cas échéant.

17
axtavt

Je ne sais pas si cette méthode était disponible lorsque cette question a été publiée à l'origine, cependant, il semble que la façon préférée de le faire dans la dernière version de Spring soit avec JdbcTemplate et PreparedStatementCreator. Voir https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html#query-org.springframework.jdbc.core.PreparedStatementCreator-org .springframework.jdbc.core.PreparedStatementSetter-org.springframework.jdbc.core.ResultSetExtractor - ou l'une des autres méthodes query qui prennent PreparedStatementCreator comme premier paramètre:

jdbcTemplate.query(con -> {
  // add required logic here
  return con.prepareStatement("sql");
 }, rs -> {
       //process row
});

Cela a l'avantage sur les autres réponses fournies (DataSourceUtils.getConnection() ou jdbcTemplate.getDataSource().getConnection() car une nouvelle connexion n'est pas allouée , il utilise la même gestion de connexion que s'il appelait n'importe quelle autre méthode d'interrogation jdbcTemplate. Par conséquent, vous n'avez pas à vous soucier de la fermeture/libération de la connexion, car Spring s'en chargera.

0
aarbor