Подробное объяснение пула соединений базы данных Java
Принцип объединения базы данных:
Основная идея объединения соединений состоит в том, чтобы сохранить подключение к базе данных как объект в памяти, когда система инициализируется. Когда пользователю необходимо получить доступ к базе данных, вместо того, чтобы установить новое соединение, из пула соединений вывозится установленный объект Free Connection. После использования пользователь не закрывает соединение, но помещает соединение обратно в пул соединений для доступа к следующему запросу. Создание и разъединение соединений управляются самим пулом соединений. В то же время вы также можете управлять начальным количеством соединений в пуле соединений, верхних и нижних пределов соединений, максимальное количество времени использования для каждого соединения, максимальное время холостого хода и т. Д., установив параметры пула соединений. Он также может отслеживать количество подключений, использования базы данных, и т. Д. С помощью собственного механизма управления.
Обычно используются пулы соединений базы данных:
Обычно используемые пулы соединений с базой данных включают JNDI, C3P0, Jakarta Apache и DBCPBONECP. Среди них третьи стороны полагаются на рамки Sing, используйте C3P0 и DBCP; и Bonecp, как говорят, является самым быстрым пулом соединений базы данных. DataSource, созданный методом JNDI, действительно реализует javax.sql.datasource (ни один из трех других методов)
Теперь мы в основном представим, как использовать метод JNDI. Этот метод реализован веб -сервером (например: Tomcat, Weblogic, Websphere, Tomcat) для реализации java.sql.datasource. Веб -сервер отвечает за инициализацию источника данных, создание соединений, распределение и управление подключениями. Поскольку это функция, реализованная самим веб -сервером, нет необходимости вводить специальные пакеты JAR в проект, но необходимо добавлять соответствующие конфигурации в некоторые файлы конфигурации сервера. Затем возьмите сервер Tomcat (база данных MySQL) в качестве примера для описания использования этого метода.
Создание и инициализация базы данных:
Создание табличного теста (ID Int Primary Key, имя VARCHAR (10), цена Float) вставьте в тестовые значения (1, «английский», 22.2); вставьте в тестовые значения (2, «Математика», 78.9); вставьте в тестовые значения (3, «История», 77,9);
1. Поместите драйвер данных MySQL-Connector-Java-5.0.3-bin.jar в LIB в каталоге Tomcat
2. Измените файл контекста.
<Resource auth = "container" driverclassname = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc/ewsdb" username = "root" пароль = "admin" url = "jdbc: mysql: // localhost: 3306/test1"/>
<Описание атрибута ресурса>
1) Имя: Укажите имя JNDI ресурса.
2) AUTH: указывает менеджера, который управляет ресурсом, который имеет два дополнительных значения: контейнер и приложение. Контейнер означает, что контейнер создает и управляет ресурсом, а приложение означает, что веб -приложение создает и управляет ресурсом.
3) Тип: укажите имя класса Java.
4) Имя пользователя: укажите имя пользователя для подключения к базе данных.
5) Пароль: укажите пароль для подключения к базе данных.
6) DriverClassName: указывает имя класса реализации драйвера в диске JDBC, подключающемся к базе данных.
7) URL: укажите URL -адрес для подключения к базе данных. 127.0.0.1 - это IP -адрес сервера базы данных, к которым подключается, 3306 - порт сервера базы данных, а BookDB является именем базы данных.
8) MAXACTICE: указывает максимальное количество активных соединений базы данных в пуле подключений базы данных. Значение 0, что указывает на то, что оно не ограничено.
9) maxidle: указывает максимальное количество подключений к базе данных в пуле подключений к базе данных, которые являются холостыми. Значение 0, что указывает на то, что оно не ограничено.
10) MAXWAIT: указывает максимальное время (в миллисекундах), чтобы пул соединений базы данных был холосто. После этого времени будет брошено исключение. Значение составляет -1, что означает, что вы можете ждать бесконечно.
maxactive = "100"
Указывает максимальное количество соединений, которые могут быть получены из пула соединений в одновременном. Если база данных не используется отдельно для приложения, настройка максиматического параметра может помешать приложению получить неограниченные соединения из других приложений. Если база данных используется только для поддержки приложения, максимальный теоретически может быть установлен на максимальное количество подключений, которые может поддерживать база данных. Maxactive просто представляет максимальное количество соединений, которые можно получить одновременно через пул соединений. Приобретение и выпуск соединений двусторонние. Когда приложение одновременно запрашивает пул соединений, пул соединений должен получить соединение из базы данных. Итак, когда приложение использует соединение и возвращает соединение в пул соединений, пул соединений также возвращает соединение в базу данных одновременно? Очевидно, ответ нет. Если это произойдет, пул соединений станет ненужным, что не только не улучшит производительность, но и снизит производительность. Итак, как справиться с соединением после того, как оно будет возвращено?
maxidle = "30"
Если Maxactive = 100 достигается во время параллелизма, пул соединений должен получить 100 подключений из базы данных, чтобы предоставить приложение для использования. Когда приложение закрывает соединение, поскольку maxidle = 30, не все подключения будут возвращены в базу данных. 30 соединений будут храниться в пуле соединений, а статус простаивает.
minidle = ”2”
Минимум не вступает в силу по умолчанию. Его значение состоит в том, что когда в пуле подключения мало миниамов, поток мониторинга системы запустит дополнительную функцию. Как правило, мы не запускаем дополнительную ветку.
Вопрос: Как установить максимальную и максидл?
Теоретически, Maxactive должен быть установлен на максимальное количество применения приложений, так что даже в случае максимальной параллелистики приложение все еще может получить подключения из пула соединений. Тем не менее, сложность заключается в том, что нам трудно точно оценить максимальное количество параллелизма. Установка его на максимальный номер параллелистики является оптимальным обеспечением качества обслуживания.
Соответствующие соединения максидла на самом деле являются длинными соединениями, поддерживаемыми пулом соединений, который также является частью, где пул соединений воспроизводит свои преимущества. Теоретически, поддержание более длинных соединений может реагировать быстрее при применении запросов, но поддержание слишком большого количества соединений будет потреблять большое количество ресурсов в базе данных. Следовательно, чем больше максидл, тем лучше. В том же примере, что и выше, мы рекомендуем установить MaxIdle до числа, близкого к 50 на 50-100, например, 55. Это позволяет вам поддерживать меньше подключений к базе данных, принимая во внимание максимальное параллелизм, и в большинстве случаев оно может предоставить приложение с самой быстрой соответствующей скоростью.
3. Откройте файл приложения Web.xml и добавьте следующую конфигурацию
<serrousce-ref> <socript> DB Connection </description> <res-ref-name> jdbc/ewsdb </res-ref-name> <sres-type> javax.sql.datasource </res-type> <res-uth> контейнер </res-wath> </resource-ref>
<resource-ref> Описание атрибута:
1) Описание: Объяснение указанного ресурса.
2) res-ref-name: указывает имя JNDI прямого ресурса, соответствующее атрибуту имени в элементе <sersource>.
3) Res-Type: указывает имя класса указанного ресурса, соответствующее атрибуту типа в элементе <Sroundce>.
4) Res-Auth: укажите менеджера, который управляет указанными ресурсами, соответствующим атрибуту Auth в элементе <serrousce>
4. Напишите код Java и поместите его в среду Tomcat, следующим образом
Создать пример JSP: myjsp.jsp
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en "http://www.w3.org/tr/html4/loose.dtd"><%@ page import =" java.io.*"%> <%@ page import =" java.util.*"%> <%@ page import =" java.sql.*"%> <%@ page import =" java. import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.naming. %> <html> <Head> <Title> Pool Connection Basbase Database в рамках Tomcat </title> </head> <body> < % try {connection conn; Заявление STMT; Результат RS; Контекст ctx = new initoryContext (); DataSource ds = (dataSource) ctx.lookup ("java: comp/env/jdbc/ewsdb"); conn = ds.getConnection (); stmt = conn.createStatement (); // Query Records rs = stmt.executequery («Выберите идентификатор, имя, цена из теста»); // Результат результата вывода. while (rs.next ()) {string col1 = rs.getstring (1); String col2 = rs.getString (2); float col3 = rs.getfloat (3); // Распечатать отображаемые данные out.println ("<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>");} out.println ("</table>"); // Закрыть набор результатов, объявление SQL и подключение к базе данных rs.close (); stmt.close (); conn.close (); } catch (Exception e) {out.println (e.getMessage ()); e.printstacktrace (); } %> </body> </html>Введите http: // localhost: 8080/test/myjsp.jsp в вашем браузере, чтобы просмотреть результаты
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!