web-dev-qa-db-ja.com

Spring JDBCで現在のConnectionオブジェクトを取得する方法

Oracleデータベースの現在のConnectionオブジェクトを取得するにはどうすればよいですか? Spring 3.0.5でJDBCモジュールを使用しています。

28
vlcik

Connection BeanからDataSourceを取得します。

Spring依存性注入を使用してBeanに注入するか、ApplicationContextに静的にアクセスすることにより、dataSourceにアクセスできます。

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

ただの情報:現在の接続オブジェクトを保持しているSpring JDBCテンプレートを使用しています。これは次のように受信できます。

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

DataSourceUtils.getConnection()を使用します。

存在する場合、現在のトランザクションに関連付けられた接続を返します。

17
axtavt

この質問が最初に投稿されたときにこのメソッドが使用可能かどうかはわかりませんが、Springの最新バージョンでJdbcTemplatePreparedStatementCreatorを使用することをお勧めします。 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- 、または最初のパラメーターとしてqueryを取る他のPreparedStatementCreatorメソッドのいずれか:

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

これには、他の提供された回答(DataSourceUtils.getConnection()またはjdbcTemplate.getDataSource().getConnection()が新しい接続がnot割り当てられているので、利点があります、他のjdbcTemplateクエリメソッドを呼び出すのと同じ接続管理を使用するため、スプリングが接続を処理するため、接続のクローズ/リリースを心配する必要もありません。

0
aarbor