c3p0 — это зрелая, высококонкурентная библиотека пулов соединений JDBC с поддержкой кэширования и повторного использования объектов PreparedStatement
.
c3p0 доступен как управляемая зависимость от Maven Central, [groupId: com.mchange, artifactId: c3p0]
Доступные версии можно найти здесь.
Дополнительную информацию см. в документации.
Из текущего снимка разработки вот последний CHANGELOG.
Комментарии и вопросы просьба адресовать автору библиотеки.
Однако, пожалуйста, имейте в виду, что он ужасный корреспондент и, по сути, мудак.
Несмотря на это, ваш отзыв очень ценен. Запросы на вытягивание принимаются с благодарностью. Вы также можете открывать проблемы.
Благодарим вас за интерес к c3p0. Я очень надеюсь, что вы найдете это полезным!
На данный момент (версия 0.10.1) c3p0 построен на виртуальной машине Java 11 и ориентирован на файлы классов JDK 7 для обеспечения постоянной совместимости с устаревшими приложениями.
Чтобы напомнить мне о необходимости перехода на Java 11, сборка завершится с ошибкой, если будет обнаружена неожиданная версия.
Если хотите, вы можете прокомментировать это требование из build.sc
. Это линия, которая выглядит как
require( sys.props( " java.runtime.version " ).startsWith( " 11 " ), s " Bad build JVM: ${sys.props( " java.runtime.version " )} -- We currently expect to build under Java 11. (We generate Java $JvmCompatVersion compatible source files.) " )
c3p0 опирается на превосходный инструмент сборки mill
.
Установить mill
. Затем в этом каталоге репозитория запустите
$ mill jar
Вы найдете исходную библиотеку out/jar.dest/out.jar
.
Если вы поддерживаете локальный репозиторий Ivy, вы можете publishVersion
в build.sc
, а затем запустить
$ mill publishLocal
Для создания документации
$ mill doc.docroot
Затем вы можете открыть в своем браузере файл out/doc/docroot.dest/index.html
По умолчанию тесты ожидают найти базу данных по адресу jdbc:postgresql://localhost:5432/c3p0
. Как видите, я обычно тестирую локальную базу данных Postgres. Вы можете изменить это в функции forkArgs
файла build.sc
.
Тестирование c3p0, хм, пугающе неформальное. Существует набор тестов junit, но он охватывает очень небольшую часть функциональности c3p0. Чтобы запустить это, это просто
$ mill test.test
В основном c3p0 тестируется путем запуска нескольких тестовых приложений и специального изменения конфигурации, чтобы увидеть, как все работает.
Если вы считаете, что c3p0 можно/нужно тестировать более профессионально и автоматически, то я тоже! Мне бы хотелось запрос на вытягивание.
build.sc
содержит множество тестовых приложений, но наиболее важными являются
$ mill test.c3p0Benchmark
Это самый простой, распространенный и проверенный вариант c3p0. Он выполняет и синхронизирует множество различных операций c3p0 и подвергает библиотеку довольно хорошему упражнению.
$ mill test.c3p0Load
В этом случае c3p0 подвергается нагрузке из 100 потоков, выполняющих по 1000 операций с базой данных каждый, а затем завершается.
$ mill test.c3p0PSLoad
Это подвергает c3p0 нагрузке из 100 потоков, выполняющих операции с базой данных на неопределенный срок. Он использует PreparedStatement
для операций с базой данных, поэтому это хороший способ использования кэша операторов.
Вы можете наблюдать (большую часть) конфигурации вашего DataSource
c3p0 во время тестирования, поскольку c3p0 регистрирует ее в INFO
при первой попытке проверки Connection
. При тестировании убедитесь, что вы работаете с ожидаемой конфигурацией!
Тесты настраиваются с помощью аргументов командной строки и файла c3p0.properties
. Чтобы поиграть с различными конфигурациями, отредактируйте test/resources-local/c3p0.properties
. Также проверьте метод forkArgs()
в build.sc
Иногда вам нужно протестировать библиотеку с патологической конфигурацией. Базовая патологическая конфигурация определяется в test/resources-local-rough/c3p0.properties
.
Чтобы добиться такого эффекта, временно отредактируйте build.sc
:
override def runClasspath : T [ Seq [ PathRef ]] = T {
super .runClasspath() ++ localResources()
// super.runClasspath() ++ localResourcesRough()
}
super.runClasspath() ++ localResources()
super.runClasspath() ++ localResourcesRough()
Затем, конечно, вы можете отредактировать test/resources-local-rough/c3p0.properties
.
Часто вам захочется сосредоточить внимание на ведении журнала класса или функции, которую вы тестируете. По умолчанию тесты c3p0 настроены на использование java.util.logging.
и настраиваться с помощью файла test/conf-logging/logging.properties
.
Конечно, вы можете изменить конфигурацию (в c3p0.properties
), чтобы использовать другую библиотеку журналирования, если хотите, но вам может потребоваться изменить сборку, чтобы включить сторонние библиотеки журналирования и настроить эти библиотеки по-своему.
Поскольку c3p0 в настоящее время строится под Java 11, а для c3p0-loom требуется Java 21, c3p0 loom — это отдельный проект.
Это всего лишь проект параллельного завода. Приведенные выше инструкции применимы (за исключением того, что у c3p0-loom
нет независимой документации для сборки).
c3p0 распространяется по лицензии LGPL v.2.1 или EPL v.1.0 по вашему выбору. Вы также можете лицензировать c3p0 по любой версии LGPL выше 2.1.
Примечание. c3p0 имеет хороший опыт сообщения об уязвимостях безопасности через проект Central Security Project компании Sonatype. Если вы обнаружите проблему безопасности c3p0, сообщите об этом через https://hackerone.com/central-security-project.