Как получить текущий объект Connection в Spring JDBC - PullRequest
26 голосов
/ 08 декабря 2011

Как я могу получить текущий объект Соединения для базы данных Oracle? Я использую модуль JDBC в Spring 3.0.5.

Ответы [ 4 ]

25 голосов
/ 08 декабря 2011

Получите Connection из компонента DataSource.

Вы можете получить доступ к источнику данных с помощью внедрения зависимостей Spring для внедрения его в ваш компонент или статического доступа к ApplicationContext:

DataSource ds = (DataSource)ApplicationContextProvider.getApplicationContext().getBean("dataSource");
Connection c = ds.getConnection();
17 голосов
/ 08 декабря 2011

Используйте DataSourceUtils.getConnection().

Возвращает соединение, связанное с текущей транзакцией, если есть.

14 голосов
/ 27 декабря 2011

Просто информация: я использую Spring JDBC Template, который содержит для меня текущий объект соединения, который можно получить следующим образом.

Connection con;
con = getJdbcTemplate().getDataSource().getConnection();
0 голосов
/ 17 мая 2019

Я не уверен, был ли этот метод доступен, когда этот вопрос был первоначально опубликован, однако, кажется, что предпочтительный способ сделать это в последней версии Spring - с JdbcTemplate и PreparedStatementCreator. См. 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(), поскольку новое соединение не выделено, оно использует то же управление соединением, что и вызов любого другого jdbcTemplate Запросы методов. Поэтому вам также не нужно беспокоиться о закрытии / освобождении соединения, так как пружина будет обрабатывать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...