Соединение закрытия пула соединения [дубликат]

Если вам приходится иметь дело с множеством столбцов, названных системой предоставления из-под вашего контроля, я пришел к следующему подходу, который представляет собой комбинацию общего подхода и конкретных замещений за один раз.

Сначала я создаю словарь из имен столбцов dataframe с использованием выражений регулярных выражений, чтобы отбросить определенные приложения имен столбцов, а затем я добавлю определенные замены в словарь для обозначения основных столбцов, как ожидается, позже в принимающей базе данных.

Затем это применяется к кадру данных за один раз.

dict=dict(zip(df.columns,df.columns.str.replace('(:S$|:C1$|:L$|:D$|\.Serial:L$)','')))
dict['brand_timeseries:C1']='BTS'
dict['respid:L']='RespID'
dict['country:C1']='CountryID
dict['pim1:D']='pim_actual'
df.rename(columns=dict, inplace=True)
94
задан Eyal 9 May 2013 в 12:53
поделиться

2 ответа

При использовании пула соединений следует закрыть соединение в конце? Если да, то не цель объединения потерянных? А если нет, то как DataSource знает, когда конкретный экземпляр Connection освобождается и может быть повторно использован? Я немного запутался в этом, любые указатели оценили.

Да, конечно, вам также нужно закрыть объединенное соединение. Фактически это оболочка вокруг фактического соединения. Он под крышкой отпускает фактическое соединение обратно в бассейн. Далее в пул можно решить, будет ли фактическое соединение фактически закрыто или повторно использоваться для нового вызова getConnection(). Таким образом, независимо от того, используете ли вы пул соединений или нет, вы всегда должны закрыть все ресурсы JDBC в обратном порядке в блоке finally блока try, где вы их приобрели. В Java 7 это может быть дополнительно упрощено с помощью инструкции try-with-resources .


Является ли следующий метод чем-то близким к стандарту? Попытка получить соединение из пула, и если DataSource не может быть установлен, используйте старомодный DriverManager. Мы даже не уверены, какая часть будет выполняться во время выполнения. Повторяя вопрос выше, следует ли закрыть соединение, исходящее из такого метода?

Пример довольно пугающий. Вам просто нужно искать / инициализировать DataSource только один раз во время запуска приложения в каком-либо конструкторе / инициализации класса конфигурации DB базы приложений. Затем просто вызовите getConnection() на один и тот же источник данных на протяжении всей жизни приложения. Нет необходимости в синхронизации или nullchecks.

См. Также:

102
ответ дан Community 26 August 2018 в 23:04
поделиться

Пулы обычно возвращают вам завернутый объект Connection, где метод close () переопределяется, как правило, возвращает соединение с пулом. Вызов close () в порядке и, возможно, все еще требуется.

Метод close (), вероятно, будет выглядеть следующим образом:

public void close() throws SQLException {
  pool.returnConnection(this);
}

Для вашего второго вопроса вы можете добавить регистратор в покажите, работает ли нижний блок. Я бы предположил, что вам нужна только одна или другая конфигурация соединений с базой данных. Мы используем только пул для доступа к базе данных. В любом случае, закрытие соединения было бы очень важным для предотвращения утечек.

20
ответ дан taer 26 August 2018 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: