webprogr.ru Новости

RSS

{{toodo.preview}}

...
{{toodo.name}}

{{toodo.preview}}

далее..

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

смотреть..

toodo.name

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

перейти...

{{toodo.preview}}

...
{{toodo.name}}

{{toodo.preview}}

далее..

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

смотреть..

toodo.name

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

перейти...


Последние новости

выбор и подключение JDBC-драйвера

Правильный выбор и подключение JDBC-драйвера – первый шаг при работе с базой:
При использовании Maven/Gradle достаточно добавить зависимость, например для PostgreSQL: 'org.postgresql:postgresql:42.6.0' (номер версии актуален на 2025 г.). После этого DriverManager при вызове getConnection("jdbc:postgresql://...") обнаружит реализованный класс драйвера (через META-INF/services/java.sql.Driver внутри .jar) и сможет подключиться. Если драйвер не найден, вы получите SQLException о том, что "No suitable driver found for ...".
Если вы запускаете приложение вручную (без сборщика зависимостей), нужно убедиться, что .jar драйвера включён в classpath (-cp аргумент). В прошлом требовалось вызвать Class.forName("com.mysql.cj.jdbc.Driver") для MySQL, сейчас это не нужно (но этот вызов не считается ошибкой – он просто лишний).
DataSource: это интерфейс, альтернатива DriverManager. Объект DataSource инкапсулирует информацию о соединении (URL, логин, пароль, настройки пула) и предоставляет метод .getConnection(). В Java EE/Spring окружении DataSource обычно конфигурируется контейнером или фреймворком, а разработчик просто получает его из контекста (например через Dependency Injection). В коде без фреймворка можно использовать реализации DataSource, например HikariDataSource (из популярного пула HikariCP) – настроив его параметрами, тоже вызывать ds.getConnection() для получения соединения. Преимущество DataSource – возможность прозрачного подключения пула и управления настройками вне кода (через конфигурацию).
Пример DataSource без контейнера:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/mydb");
config.setUsername("postgres");
config.setPassword("secret");
config.setMaximumPoolSize(10);
DataSource ds = new HikariDataSource(config);
try (Connection conn = ds.getConnection()) {
// ... use connection ...
}
Здесь мы явно создали пул на 10 соединений. Каждый вызов ds.getConnection() берёт свободное соединение из пула (или ожидает/создаёт новое, если все заняты), а conn.close() не реально закрывает соединение, а возвращает его в пул для повторного использования.
Пулы соединений (Connection Pooling)
Зачем нужен пул? Установка нового подключения к БД — дорогая операция (по времени и ресурсам). Пул соединений держит несколько открытых соединений и переиспользует их для многих запросов, что повышает производительность.
DataSource как пул: В Java-практике пул реализуется через DataSource. Запрос getConnection() получает уже готовое соединение из пула. Популярные библиотеки пулов: HikariCP (быстрый и современный), Apache DBCP, c3p0 и др.
Настройка пула: включает размер пула (min/max подключений), таймауты ожидания, время жизни соединения и пр. Правильный размер пула зависит от нагрузки и возможностей БД (чем больше одновременных запросов нужно поддерживать, тем больше может понадобиться соединений, но избыток тоже вреден).
Практика в Spring: В приложениях Spring Boot при наличии драйвера на класспути автоматически настраивается HikariCP как пул соединений по умолчанию. Параметры пула можно указать в application.properties (например, spring.datasource.hikari.maximum-pool-size=10).
Ограничение ресурсов: Даже с пулом важно закрывать соединения (возвращая их в пул). Утечка (leak) соединений в пуле приведёт к исчерпанию пула – новые подключения не будут выдаваться. Пулы обычно имеют механизмы обнаружения утечек и логгирования предупреждений.
Рейтинг@Mail.ru