Как проверить утечку Соединения с базой данных в JAVA EE-приложение?

Там какой-либо путь состоит в том, чтобы проверить утечку соединения в JAVA EE-приложение?

Приложение работает на моей локальной машине. Это использует базу данных MySQL, и пользователь вводит свои детали в эту базу данных.

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

5
задан Arjan Tijms 22 September 2012 в 13:07
поделиться

4 ответа

log4jdbc, Java JDBC драйвер, который может регистрировать SQL и/или JDBC вызовы для других JDBC драйверов, имеет регистратор, который регистрирует события открытия и закрытия соединения, а также сбрасывает все номера открытых соединений. Это очень полезно для поиска проблем с утечкой соединений.

Еще один инструмент, который вы, возможно, захотите проверить - ConnLeakFinder, простой инструмент для выявления утечек jdbc соединений в java коде. Однако у меня нет опыта работы с ним.

13
ответ дан 18 December 2019 в 13:11
поделиться

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

Утечка соединения действительно является проблемой. Я был бы обеспокоен, если бы управление подключением было разбросано по такому количеству мест в коде, что было бы большой проблемой найти их все. Я ожидал увидеть пул соединений Java EE, который использовался только в пределах четко определенного уровня сохраняемости. Соединения должны открываться уровнем сервиса, который управляет транзакцией для этой единицы работы и закрывает ее, как только вариант использования завершается, в пределах области действия метода в блоке finally.

Если это не так, думаю, пора провести рефакторинг.

1
ответ дан 18 December 2019 в 13:11
поделиться

попробуйте использовать FindBug . Это инструмент статического анализа кода, доступный как плагин eclipse, так и как отдельное приложение. Помимо утечки соединения, в вашем приложении также обнаружатся другие проблемы

0
ответ дан 18 December 2019 в 13:11
поделиться

Используйте фабрику соединений, например:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {
    private static Connection connection;

    public static synchronized Connection getConnection() throws SQLException {
        if (connection == null || connection.isClosed()) {
            connection = DriverManager.getConnection("url");
        }
        return connection;
    }
}

Таким образом, вы никогда не оставите без присмотра соединения. Используйте пул соединений, если вам нужно более одного соединения (для производительности). Большинство серверов приложений имеют пул соединений JDBC.

0
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

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