Быстро, просто, надежно. HikariCP — это готовый к производству пул соединений JDBC с нулевыми издержками. Библиотека размером примерно 165 КБ очень легкая. О том, как мы это делаем, читайте здесь.
«Простота — необходимое условие надежности».
- Доктор Эдсгер Дейкстра
Важный
Чтобы избежать редких ситуаций, когда пул обнуляется и не восстанавливается, необходимо настроить TCP Keepalive . Некоторые драйверы JDBC поддерживают это через свойства, например tcpKeepAlive=true
в PostgreSQL, но в любом случае это также можно настроить на уровне ОС. См. раздел Настройка поддержки активности TCP TCP и/или поддержки активности TCP для более удобной работы с PostgreSQL.
Артефакт Java 11+ maven:
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >6.2.1</ version >
</ dependency >
Артефакт Java 8 maven ( режим обслуживания ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >4.0.3</ version >
</ dependency >
Артефакт Java 7 maven ( режим обслуживания ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java7</ artifactId >
< version >2.4.13</ version >
</ dependency >
Артефакт Java 6 maven ( режим обслуживания ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java6</ artifactId >
< version >2.3.13</ version >
</ dependency >
Или скачать отсюда.
Микробенчмарки были созданы для изоляции и измерения накладных расходов пулов с использованием среды микробенчмарков JMH. Вы можете ознакомиться с проектом тестирования HikariCP для получения подробной информации и просмотреть/запустить тесты самостоятельно.
DataSource.getConnection()
/ Connection.close()
.Connection.prepareStatement()
, Statement.execute()
, Statement.close()
.Анализ HikariCP v2.6 по сравнению с другими пулами в отношении уникальной нагрузки «пикового спроса».
Среда клиента требовала высоких затрат на приобретение новых соединений и требований к пулу с динамическим размером, но при этом требовала оперативности реагирования на запросы всплесков нагрузки. О том, как справляться с пиковым спросом, читайте здесь.
АКА «То, что вы, вероятно, не знали о размере пула соединений» . Посмотрите видео группы Oracle Real-world Performance и узнайте, почему соединений с базой данных не должно быть так много, как это часто бывает. Фактически, слишком большое количество связей оказывает явное и очевидное негативное влияние на производительность; разница в 50 раз в случае демонстрации Oracle. Читайте дальше, чтобы узнать.
Мы хотели бы поблагодарить ребят из WIX за незапрошенную и содержательную статью о HikariCP в их инженерном блоге. Посмотрите, если будет время.
Прочтите нашу интересную задачу по пулу «База данных не работает».
Программное обеспечение с открытым исходным кодом, такое как HikariCP, как и любой другой продукт, конкурирует на свободном рынке. Мы поняли. Мы понимаем, что усовершенствования продуктов, когда-то ставшие общедоступными, часто используются совместно. И мы понимаем, что идеи могут возникать из духа времени; одновременно и независимо. Но график инноваций, особенно в проектах с открытым исходным кодом, также ясен, и мы хотим, чтобы наши пользователи понимали направление потока инноваций в нашей сфере. Может быть деморализующе видеть, как легко усваиваются результаты сотен часов размышлений и исследований, и, возможно, это присуще свободному рынку, но мы не деморализованы. Мы мотивированы; чтобы расширить разрыв.
HikariCP поставляется с разумными настройками по умолчанию, которые хорошо работают в большинстве развертываний без дополнительных настроек. Каждое свойство является необязательным, за исключением «основного», отмеченного ниже.
? HikariCP использует миллисекунды для всех значений времени.
HikariCP полагается на точные таймеры для обеспечения производительности и надежности. Крайне важно , чтобы ваш сервер был синхронизирован с источником времени, например с NTP-сервером. Особенно, если ваш сервер работает на виртуальной машине. Почему? Подробнее читайте здесь. Не полагайтесь на настройки гипервизора для «синхронизации» часов виртуальной машины. Настройте синхронизацию источника времени внутри виртуальной машины. Если вы обратитесь за помощью по проблеме, которая, как выяснилось, вызвана отсутствием синхронизации времени, вас публично будут насмехаться в Твиттере.
? dataSourceClassName
Это имя класса DataSource
, предоставляемого драйвером JDBC. Чтобы получить имя этого класса, обратитесь к документации вашего конкретного драйвера JDBC или см. таблицу ниже. Примечание. Источники данных XA не поддерживаются. Для XA требуется настоящий менеджер транзакций, такой как Bitronix. Обратите внимание, что вам не нужно это свойство, если вы используете jdbcUrl
для конфигурации драйвера JDBC «старой школы» на основе DriverManager. По умолчанию: нет
- или -
? jdbcUrl
Это свойство указывает HikariCP использовать конфигурацию на основе DriverManager. Мы считаем, что конфигурация на основе DataSource (выше) лучше по ряду причин (см. ниже), но для многих развертываний существенной разницы нет. При использовании этого свойства со «старыми» драйверами вам также может потребоваться установить свойство driverClassName
, но сначала попробуйте без него. Обратите внимание: если это свойство используется, вы все равно можете использовать свойства DataSource для настройки драйвера, и фактически рекомендуется использовать его вместо параметров драйвера, указанных в самом URL-адресе. По умолчанию: нет
? username
Это свойство устанавливает имя пользователя для проверки подлинности по умолчанию, используемое при получении соединений из базового драйвера. Обратите внимание, что для источников данных это работает очень детерминированным образом, вызывая DataSource.getConnection(*username*, password)
для базового источника данных. Однако в конфигурациях на основе драйверов каждый драйвер индивидуален. В случае на основе драйвера HikariCP будет использовать это свойство username
для установки свойства user
в Properties
передаваемых в вызов DriverManager.getConnection(jdbcUrl, props)
драйвера. Если это не то, что вам нужно, полностью пропустите этот метод и вызовите, например, addDataSourceProperty("username", ...)
. По умолчанию: нет
? password
Это свойство устанавливает пароль аутентификации по умолчанию, используемый при получении соединений от базового драйвера. Обратите внимание, что для источников данных это работает очень детерминированно, вызывая DataSource.getConnection(username, *password*)
для базового источника данных. Однако в конфигурациях на основе драйверов каждый драйвер индивидуален. В случае с драйвером HikariCP будет использовать это свойство password
для установки свойства password
в Properties
передаваемых в вызов DriverManager.getConnection(jdbcUrl, props)
драйвера. Если это не то, что вам нужно, полностью пропустите этот метод и вызовите, например, addDataSourceProperty("pass", ...)
. По умолчанию: нет
✅ autoCommit
Это свойство управляет поведением автоматической фиксации соединений, возвращаемых из пула, по умолчанию. Это логическое значение. По умолчанию: правда
⏳ тайм connectionTimeout
Это свойство управляет максимальным количеством миллисекунд, в течение которых клиент (то есть вы) будет ожидать соединения из пула. Если это время превышено, а соединение не становится доступным, будет выдано исключение SQLException. Минимально допустимое время ожидания соединения составляет 250 мс. По умолчанию: 30000 (30 секунд).
⏳ idleTimeout
Это свойство контролирует максимальное время, в течение которого соединению разрешено простаивать в пуле. Этот параметр применяется только в том случае, если minimumIdle
меньше maximumPoolSize
. Неактивные соединения не будут удалены, как только пул достигнет minimumIdle
соединений в режиме ожидания. Независимо от того, будет ли соединение отключено как бездействующее или нет, максимальное отклонение составит +30 секунд, а среднее отклонение составит +15 секунд. Соединение никогда не будет отключено как бездействующее до истечения этого таймаута. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула. Минимально допустимое значение — 10000 мс (10 секунд). По умолчанию: 600000 (10 минут).
⏳ время keepaliveTime
Это свойство контролирует, как часто HikariCP будет пытаться поддерживать соединение, чтобы предотвратить его тайм-аут из-за базы данных или сетевой инфраструктуры. Это значение должно быть меньше значения maxLifetime
. «Keepalive» будет происходить только при незанятом соединении. Когда наступит время для «поддержки активности» для данного соединения, это соединение будет удалено из пула, подвергнуто «пингу», а затем возвращено в пул. «Пинг» — это одно из следующих действий: вызов метода JDBC4 isValid()
или выполнение connectionTestQuery
. Как правило, длительность вне пула должна измеряться в однозначных миллисекундах или даже субмиллисекундах и, следовательно, не должна оказывать заметного влияния на производительность или иметь незначительное влияние. Минимально допустимое значение — 30 000 мс (30 секунд), но наиболее желательно значение в диапазоне минут. По умолчанию: 120000 (2 минуты).
⏳ maxLifetime
Это свойство контролирует максимальное время жизни соединения в пуле. Используемое соединение никогда не будет удалено, оно будет удалено только тогда, когда оно будет закрыто. Для каждого соединения применяется незначительное отрицательное затухание, чтобы избежать массового затухания в пуле. Мы настоятельно рекомендуем установить это значение, и оно должно быть на несколько секунд короче, чем ограничение времени подключения, установленное любой базой данных или инфраструктурой. Значение 0 указывает на отсутствие максимального срока службы (бесконечный срок службы), конечно, в зависимости от idleTimeout
. Минимально допустимое значение — 30000 мс (30 секунд). По умолчанию: 1800000 (30 минут).
? connectionTestQuery
Если ваш драйвер поддерживает JDBC4, мы настоятельно рекомендуем не устанавливать это свойство. Это для «устаревших» драйверов, которые не поддерживают Connection.isValid() API
. Это запрос, который будет выполнен непосредственно перед тем, как вам будет предоставлено соединение из пула, чтобы проверить, что соединение с базой данных все еще активно. Опять же, попробуйте запустить пул без этого свойства. HikariCP зарегистрирует ошибку, если ваш драйвер не совместим с JDBC4, чтобы вы знали об этом. По умолчанию: нет
? minimumIdle
Это свойство контролирует минимальное количество простаивающих соединений , которые HikariCP пытается поддерживать в пуле. Если количество простаивающих соединений опускается ниже этого значения, а общее количество соединений в пуле меньше, чем maximumPoolSize
, HikariCP приложит все усилия, чтобы быстро и эффективно добавить дополнительные соединения. Однако для максимальной производительности и реагирования на пиковые нагрузки мы рекомендуем не устанавливать это значение и вместо этого разрешить HikariCP действовать как пул соединений фиксированного размера . По умолчанию: то же, что и MaximumPoolSize.
? maximumPoolSize
Это свойство управляет максимальным размером, которого разрешено достичь пулу, включая как простаивающие, так и используемые соединения. По сути, это значение будет определять максимальное количество фактических подключений к базе данных. Разумное значение этого параметра лучше всего определяется вашей средой выполнения. Когда пул достигнет этого размера и не будет свободных соединений, вызовы getConnection() будут блокироваться на срок до миллисекунд connectionTimeout
, прежде чем истечет время ожидания. Пожалуйста, прочитайте о размерах бассейна. По умолчанию: 10
? metricRegistry
Это свойство доступно только через программную конфигурацию или контейнер IoC. Это свойство позволяет указать экземпляр MetricRegistry
Codahale/Dropwizard , который будет использоваться пулом для записи различных показателей. Подробности смотрите на вики-странице Метрики. По умолчанию: нет
? healthCheckRegistry
Это свойство доступно только через программную конфигурацию или контейнер IoC. Это свойство позволяет указать экземпляр Codahale/Dropwizard HealthCheckRegistry
, который будет использоваться пулом для сообщения текущей информации о состоянии. Подробности смотрите на вики-странице Health Checks. По умолчанию: нет
? poolName
Это свойство представляет определяемое пользователем имя пула соединений и отображается в основном в консолях ведения журналов и управления JMX для идентификации пулов и их конфигураций. По умолчанию: генерируется автоматически
⏳ initializationFailTimeout
Это свойство определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен с помощью начального соединения. Любое положительное число считается количеством миллисекунд, в течение которых будет предпринята попытка установить начальное соединение; поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого тайм-аута, будет выдано исключение. Этот тайм-аут применяется после периода connectionTimeout
. Если значение равно нулю (0), HikariCP попытается получить и проверить соединение. Если соединение получено, но не прошло проверку, будет выдано исключение и пул не запустится. Однако если соединение не может быть получено, пул запустится, но последующие попытки получить соединение могут оказаться неудачными. Если значение меньше нуля, любая первоначальная попытка подключения будет пропущена, и пул запустится немедленно, пытаясь получить соединения в фоновом режиме. Следовательно, последующие попытки установить соединение могут оказаться неудачными. По умолчанию: 1
❎ isolateInternalQueries
Это свойство определяет, изолирует ли HikariCP запросы внутреннего пула, такие как проверка работоспособности соединения, в своей собственной транзакции. Поскольку обычно это запросы только для чтения, редко возникает необходимость инкапсулировать их в отдельную транзакцию. Это свойство применяется только в том случае, если autoCommit
отключен. По умолчанию: ложь
allowPoolSuspension
Это свойство определяет, можно ли приостановить и возобновить работу пула через JMX. Это полезно для определенных сценариев автоматизации аварийного переключения. Когда пул приостановлен, вызовы getConnection()
не будут истекать по тайм-ауту и будут удерживаться до возобновления работы пула. По умолчанию: ложь
❎только readOnly
Это свойство определяет, находятся ли соединения, полученные из пула, в режиме только для чтения по умолчанию. Обратите внимание, что некоторые базы данных не поддерживают концепцию режима только для чтения, в то время как другие обеспечивают оптимизацию запросов, когда для соединения установлено значение «только для чтения». Нужно ли вам это свойство или нет, во многом зависит от вашего приложения и базы данных. По умолчанию: ложь
❎ registerMbeans
Это свойство определяет, зарегистрированы или нет JMX Management Beans («MBeans»). По умолчанию: ложь
? catalog
Это свойство устанавливает каталог по умолчанию для баз данных, поддерживающих концепцию каталогов. Если это свойство не указано, используется каталог по умолчанию, определенный драйвером JDBC. По умолчанию: драйвер по умолчанию
? connectionInitSql
Это свойство устанавливает оператор SQL, который будет выполняться после создания каждого нового соединения перед его добавлением в пул. Если этот SQL-код недействителен или выдает исключение, это будет рассматриваться как сбой соединения и будет использоваться стандартная логика повтора. По умолчанию: нет
? driverClassName
HikariCP попытается разрешить драйвер через DriverManager исключительно на основе jdbcUrl
, но для некоторых старых драйверов также необходимо указать driverClassName
. Опустите это свойство, если только вы не получите очевидное сообщение об ошибке, указывающее, что драйвер не найден. По умолчанию: нет
? transactionIsolation
Это свойство управляет уровнем изоляции транзакций по умолчанию для соединений, возвращаемых из пула. Если это свойство не указано, используется уровень изоляции транзакции по умолчанию, определенный драйвером JDBC. Используйте это свойство только в том случае, если у вас есть особые требования к изоляции, общие для всех запросов. Значением этого свойства является имя константы из класса Connection
, например TRANSACTION_READ_COMMITTED
, TRANSACTION_REPEATABLE_READ
и т. д. Значение по умолчанию: драйвер по умолчанию.
⏳время validationTimeout
Это свойство контролирует максимальное время, в течение которого соединение будет проверяться на работоспособность. Это значение должно быть меньше connectionTimeout
. Наименьшее допустимое время ожидания проверки составляет 250 мс. По умолчанию: 5000
⏳ leakDetectionThreshold
Это свойство управляет временем, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек — 2000 (2 секунды). По умолчанию: 0
➡ dataSource
Это свойство доступно только через программную конфигурацию или контейнер IoC. Это свойство позволяет вам напрямую установить экземпляр DataSource
для переноса в пул, вместо того, чтобы HikariCP создавал его посредством отражения. Это может быть полезно в некоторых средах внедрения зависимостей. Если указано это свойство, свойство dataSourceClassName
и все свойства, специфичные для источника данных, будут игнорироваться. По умолчанию: нет
? schema
Это свойство устанавливает схему по умолчанию для баз данных, поддерживающих концепцию схем. Если это свойство не указано, используется схема по умолчанию, определенная драйвером JDBC. По умолчанию: драйвер по умолчанию
➡ threadFactory
Это свойство доступно только через программную конфигурацию или контейнер IoC. Это свойство позволяет вам установить экземпляр java.util.concurrent.ThreadFactory
, который будет использоваться для создания всех потоков, используемых пулом. Это необходимо в некоторых средах с ограниченным выполнением, где потоки могут создаваться только с помощью ThreadFactory
предоставляемого контейнером приложения. По умолчанию: нет
➡ scheduledExecutor
Это свойство доступно только через программную конфигурацию или контейнер IoC. Это свойство позволяет вам установить экземпляр java.util.concurrent.ScheduledExecutorService
, который будет использоваться для различных внутренних запланированных задач. При предоставлении HikariCP экземпляра ScheduledThreadPoolExecutor
рекомендуется использовать setRemoveOnCancelPolicy(true)
. По умолчанию: нет
➡ exceptionOverride
Это свойство доступно только через программную конфигурацию или контейнер IoC. Это свойство позволяет вам установить экземпляр класса, реализующего интерфейс com.zaxxer.hikari.SQLExceptionOverride
, который будет вызываться до того, как соединение будет исключено из пула из-за определенных условий исключения. Обычно при возникновении исключения SQLException
соединения исключаются из пула при наличии определенных SQLStates или ErrorCodes . Метод adjudicate()
будет вызван для экземпляра SQLExceptionOverride
, который может вернуть одно из следующих значений: Override.CONTINUE_EVICT
. Override.DO_NOT_EVICT
или Override.MUST_EVICT
. За исключением очень специфических случаев, следует возвращать Override.CONTINUE_EVICT
, позволяя выполнять логику выселения/невыселения по умолчанию. По умолчанию: нет
? exceptionOverrideClassName
Это свойство позволяет указать имя предоставленного пользователем класса, реализующего интерфейс com.zaxxer.hikari.SQLExceptionOverride
. Экземпляр класса будет создан пулом для вынесения решения об исключении соединений. Полное описание см. в приведенном выше exceptionOverride
. По умолчанию: нет
Как вы можете видеть выше, у HikariCP есть множество «ручек», которые можно поворачивать, но их сравнительно меньше, чем у некоторых других пулов. Это философия дизайна. Эстетика дизайна HikariCP — минимализм. В соответствии с философией дизайна «лучше или меньше — больше» , некоторые оси конфигурации намеренно опущены.
Многие пулы соединений, включая Apache DBCP, Vibur, c3p0 и другие, предлагают кэширование PreparedStatement
. HikariCP нет. Почему?
На уровне пула соединений PreparedStatements
можно кэшировать только для каждого соединения . Если ваше приложение имеет 250 часто выполняемых запросов и пул из 20 подключений, вы просите свою базу данных хранить 5000 планов выполнения запросов - и аналогичным образом пул должен кэшировать это количество PreparedStatements
и связанный с ними граф объектов.
Большинство основных драйверов JDBC для баз данных уже имеют настраиваемый кэш операторов, включая PostgreSQL, Oracle, Derby, MySQL, DB2 и многие другие. Драйверы JDBC имеют уникальную возможность использовать специфические функции базы данных, и почти все реализации кэширования способны совместно использовать планы выполнения между соединениями . Это означает, что вместо 5000 операторов в памяти и связанных с ними планов выполнения 250 часто выполняемых запросов приводят к ровно 250 планам выполнения в базе данных. Умные реализации даже не сохраняют объекты PreparedStatement
в памяти на уровне драйвера, а вместо этого просто присоединяют новые экземпляры к существующим идентификаторам планов.
Использование кэша операторов на уровне пула является антишаблоном и отрицательно повлияет на производительность вашего приложения по сравнению с кэшами, предоставляемыми драйверами.
Как и кэширование операторов, большинство крупных поставщиков баз данных поддерживают ведение журнала операторов через свойства собственного драйвера. Сюда входят Oracle, MySQL, Derby, MSSQL и другие. Некоторые даже поддерживают медленную регистрацию запросов. Для тех немногих баз данных, которые его не поддерживают, доступно несколько вариантов. Мы получили отчет о том, что p6spy работает хорошо, а также отмечаем наличие log4jdbc и jdbcdslog-exp.
Пожалуйста, прочтите Руководство по быстрому восстановлению для получения подробной информации о том, как настроить драйвер и систему для правильного восстановления после перезапуска базы данных и событий сетевого раздела.
Вы можете использовать класс HikariConfig
следующим образом:
HikariConfig config = new HikariConfig ();
config . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
config . setUsername ( "bart" );
config . setPassword ( "51mp50n" );
config . addDataSourceProperty ( "cachePrepStmts" , "true" );
config . addDataSourceProperty ( "prepStmtCacheSize" , "250" );
config . addDataSourceProperty ( "prepStmtCacheSqlLimit" , "2048" );
HikariDataSource ds = new HikariDataSource ( config );
1 пример, специфичный для MySQL, НЕ КОПИРУЙТЕ ДОВЕРНО.
или напрямую создайте экземпляр HikariDataSource
следующим образом:
HikariDataSource ds = new HikariDataSource ();
ds . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
ds . setUsername ( "bart" );
ds . setPassword ( "51mp50n" );
...
или файл свойств на основе:
// Examines both filesystem and classpath for .properties file
HikariConfig config = new HikariConfig ( "/some/path/hikari.properties" );
HikariDataSource ds = new HikariDataSource ( config );
Пример файла свойств:
dataSourceClassName =org.postgresql.ds.PGSimpleDataSource
dataSource.user =test
dataSource.password =test
dataSource.databaseName =mydb
dataSource.portNumber =5432
dataSource.serverName =localhost
или java.util.Properties
на основе:
Properties props = new Properties ();
props . setProperty ( "dataSourceClassName" , "org.postgresql.ds.PGSimpleDataSource" );
props . setProperty ( "dataSource.user" , "test" );
props . setProperty ( "dataSource.password" , "test" );
props . setProperty ( "dataSource.databaseName" , "mydb" );
props . put ( "dataSource.logWriter" , new PrintWriter ( System . out ));
HikariConfig config = new HikariConfig ( props );
HikariDataSource ds = new HikariDataSource ( config );
Также доступно системное свойство hikaricp.configurationFile
, которое можно использовать для указания местоположения файла свойств. Если вы собираетесь использовать эту опцию, создайте экземпляр HikariConfig
или HikariDataSource
используя конструктор по умолчанию, и файл свойств будет загружен.
Советы по производительности MySQL
Мы рекомендуем использовать dataSourceClassName
вместо jdbcUrl
, но допускается и то, и другое. Мы скажем это еще раз: любое из них приемлемо .
Примечание. Пользователям автоматической настройки Spring Boot необходимо использовать конфигурацию на основе jdbcUrl
.
Известно, что источник данных MySQL не работает в отношении поддержки тайм-аута сети. Вместо этого используйте конфигурацию jdbcUrl
.
Вот список классов JDBC DataSource для популярных баз данных:
База данных | Водитель | Класс источника данных |
---|---|---|
Апач Дерби | дерби | org.apache.derby.jdbc.ClientDataSource |
Жар-птица | Сойка | org.firebirdsql.ds.FBSimpleDataSource |
Google-гаечный ключ | Гаечный ключ | com.google.cloud.spanner.jdbc.JdbcDriver |
Н2 | Н2 | org.h2.jdbcx.JdbcDataSource |
HSQLDB | HSQLDB | org.hsqldb.jdbc.JDBCDataSource |
IBM DB2 | IBM JCC | com.ibm.db2.jcc.DB2SimpleDataSource |
IBM Информикс | IBM Информикс | com.informix.jdbcx.IfxDataSource |
MS SQL-сервер | Майкрософт | com.microsoft.sqlserver.jdbc.SQLServerDataSource |
Разъем/J | ||
МарияДБ | МарияДБ | org.mariadb.jdbc.MariaDbDataSource |
Оракул | Оракул | oracle.jdbc.pool.OracleDataSource |
ОриентБД | ОриентБД | com.orientechnologies.orient.jdbc.OrientDataSource |
PostgreSQL | pgjdbc-ng | com.impossibl.postgres.jdbc.PGDataSource |
PostgreSQL | PostgreSQL | org.postgresql.ds.PGSimpleDataSource |
SAP МаксДБ | САП | com.sap.dbtech.jdbc.DriverSapDB |
SQLite | ксерийный | org.sqlite.SQLiteDataSource |
СиБасе | jConnect | com.sybase.jdbc4.jdbc.SybDataSource |
Примечание. Play 2.4 теперь по умолчанию использует HikariCP. Для платформы Play появился новый плагин; play-hikaricp. Если вы используете превосходную платформу Play, ваше приложение заслуживает HikariCP. Спасибо команде Edulify!
Tomekw создал новую оболочку Clojure, которую можно найти здесь.
Tomekw создал новую оболочку JRuby, которую можно найти здесь.
Дискуссионная группа Google HikariCP здесь, часто задаваемые вопросы пополняются.
Не забудьте Wiki для получения дополнительной информации, такой как:
⇒ Java 8+ (артефакты Java 6/7 находятся в режиме обслуживания)
⇒ библиотека slf4j
Высокопроизводительные проекты никогда не могут иметь слишком много инструментов! Хотим выразить благодарность следующим компаниям:
Спасибо компании ej-technologies за отличный универсальный профайлер JProfiler.
YourKit поддерживает проекты с открытым исходным кодом с помощью полнофункционального Java Profiler. Нажмите на логотип YourKit ниже, чтобы узнать больше.
Пожалуйста, внесите изменения и отправьте запросы на включение из ветки dev
вместо master
. Пожалуйста, настройте свой редактор на использование пробелов вместо табуляции и придерживайтесь внешнего стиля кода, который вы редактируете. Ветка dev
всегда более «актуальна», чем master
, если вы хотите жить на грани.