Advanced
Тема интерфейса
Data Warehouse Service

Сторонний пул соединений конфигурационной базы данных JDBC

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Контекст

GaussDB(DWS) не имеет собственного JDBC‑пула соединений, а унаследованный пул соединений PostgreSQL отключён. Используйте сторонние пулы соединений, такие как Druid, HikariCP или DBCP 2.

Note
  • Унаследованный JDBC‑пул соединений от PostgreSQL отключён и не рекомендуется.
  • Определите версию JDBC и драйвера для загрузки и способ настройки параметров пула соединений в соответствии с требованиями сайта.

Настройка пула соединений DBCP 2

  1. Скачайте пакет драйвера JDBC. Для подробностей см Загрузка драйвера JDBC или ODBC.

  2. Добавьте JDBC драйверный пакет и commons-dbcp2, commons-logging, и commons-pool2 драйверные пакеты в проект и настройте параметры, связанные с пулом соединений базы данных.

    Note
    • Включение removeAbandoned позволяет пулу соединений вернуть и повторно использовать отброшенное соединение. Это происходит, когда условия (getNumIdle() < 2) и (getNumActive() > getMaxTotal() - 3) выполнены.
      • Например, если maxTotal установлен в 20, имеется 18 активных соединений и одно соединение ограничено. В этом случае, removeAbandoned срабатывает.
      • Активное соединение удаляется только когда оно не используется в течение времени, указанного в removeAbandonedTimeout. Значение по умолчанию — 300 секунд.
      • Обход результирующего набора не считается использованием. Создание statement, prepared statement, callable statement или выполнение запроса сбрасывает lastUsed свойство его родительского соединения.
    • В системах с высокой нагрузкой настройка maxIdle меньшее значение может привести к немедленному закрытию новых соединений. Это происходит потому, что активные потоки закрывают соединения быстрее, чем те, которые открывают соединения. В результате количество простоя соединений превышает значение maxIdle. В системах с высокой нагрузкой наиболее подходящее значение maxIdle в системе с высокой нагрузкой зависит от сценария применения, но значение по умолчанию является хорошим начальным значением.
    Таблица 1 Параметры пула соединений DBCP 2

    Параметр

    Значение по умолчанию

    Описание

    driverClassName

    Введите значение org.postgresql.Driver.

    Имя драйвера базы данных.

    url

    N/A

    URL для подключения к базе данных.

    имя пользователя

    N/A

    Имя пользователя.

    пароль

    N/A

    Пароль.

    connectionProperties

    N/A

    Параметры соединения отправляются драйверу JDBC при установке нового соединения. Строка должна быть в формате [Parameter name=Parameter value;].

    NOTE:

    Необходимо указать атрибуты username и password. Поэтому эти два параметра не нужно включать здесь.

    defaultAutoCommit

    N/A

    Автоматическая отправка. По умолчанию соединение, созданное через текущий пул соединений, находится в состоянии автоматической отправки. Если этот параметр не установлен, то setAutoCommit метод не вызывается.

    defaultReadOnly

    N/A

    Настройка только для чтения. По умолчанию соединение, созданное через текущий пул соединений, только для чтения. Если соединение не установлено, то setReadOnly метод не вызывается.

    defaultTransactionIsolation

    N/A

    Уровень изоляции транзакций.

    Для соединений, создаваемых через этот пул, используется политика изоляции транзакций по умолчанию. Значение может быть одним из следующих:

    • NONE
    • READ_COMMITTED: Операция чтения зафиксирована.
    • READ_UNCOMMITTED: Операция чтения не зафиксирована.
    • REPEATABLE_READ
    • SERIALIZABLE

    defaultCatalog

    N/A

    По умолчанию используется каталог для соединений, созданных через этот пул.

    cacheState

    true

    Состояние кеша пула соединений.

    Если этот параметр установлен в true, текущий статус только для чтения и настройки автофиксации кешируются во время первой операции чтения или записи после подключения пула ресурсов. Это исключает необходимость дополнительных запросов к базе данных на последующих getter вызовы.

    Если базовое соединение доступно напрямую, изменения состояния только для чтения или настроек автофиксации не обновят кеш. Установите этот параметр в false чтобы отключить кеширование в таких случаях.

    defaultQueryTimeout

    null

    Интервал тайм‑аута запроса.

    • Введите целое число, которое используется для указания интервала тайм‑аута запроса при создании оператора.
    • Если значение null, используются настройки драйвера по умолчанию.

    enableAutoCommitOnReturn

    true

    Когда соединение возвращается в пул, оно автоматически фиксируется.

    Устанавливая его в true вернет соединение в пул с autoCommit установлен в true по умолчанию.

    rollbackOnReturn

    true

    Отменить все операции, когда соединение возвращается в пул.

    Устанавливая его в true будет автоматически выполнено "rollback()" когда соединение возвращается в пул, при условии, что автоотправка включена.

    initialSize

    0

    Количество первоначальных соединений. Количество соединений, созданных во время инициализации при запуске текущего пула соединений. Исходная версия — 1.2.

    maxTotal

    8

    Максимальное количество активных соединений в пуле. Отрицательное значение означает отсутствие ограничения.

    maxIdle

    8

    Максимальное количество простояющих соединений в пуле. Избыточные простоящие соединения освобождаются при возврате в пул. Отрицательное значение означает отсутствие ограничения.

    minIdle

    0

    Минимальное количество простояющих соединений. Минимальное количество простояющих соединений, которые следует сохранять в пуле. Если количество простояющих соединений опускается ниже этого значения, создаются новые простоящие соединения. Значение 0 означает, что не создаются простоящие соединения.

    ПРИМЕЧАНИЕ:

    Значение вступает в силу только когда timeBetweenEvictionRunsMillis установлено положительное число.

    maxWaitMillis

    N/A

    Максимальное время ожидания получения соединения из пула соединений.

    • Если этот параметр установлен в –1 и если соединение недоступно, пул соединений ждёт бесконечно, пока соединение не будет получено.
    • Если параметр установлен в N, пул соединений ждёт N миллисекунд. Если время ожидания недостаточно, генерируется исключение.

    validationQuery

    SELECT 1

    SQL‑запрос подтверждения, который проверяет соединение до того, как оно будет возвращено вызывающему пулом соединений.

    • Если указано, запрос должен быть SELECT оператор, который возвращает как минимум одну строку данных.
    • Если значение не указано, соединение проверяется вызовом "isValid()" метод.

    validationQueryTimeout

    N/A

    Интервал таймаута запроса для корректных SQL‑операторов, в секундах.

    Если параметр установлен положительным числом, значение передается в "setQueryTimeOut()" метод JDBC‑драйвера. Настройка применима к SQL‑оператору, подтверждающему корректность запроса.

    testOnCreate

    false

    Нужно ли проверять действительность соединения сразу после создания. Если проверка не удалась, попытка создания завершается неудачей.

    testOnBorrow

    true

    Нужно ли проверять действительность соединения при выдаче из пула. Если проверка не удалась, соединение освобождается и выбирается другое.

    testOnReturn

    false

    Нужно ли проверять действительность соединения перед возвратом в пул.

    testWhileIdle

    false

    Нужно ли проверять действительность незанятых соединений с помощью эвиктора, если он доступен. Недействительные соединения освобождаются.

    timeBetweenEvictionRunsMillis

    -1

    Время гибернации (в миллисекундах) потока эвикции неактивных объектов. Неположительное значение отключает поток.

    numTestsPerEvictionRun

    3

    Количество объектов, проверяемых во время работы каждого потока выселения простоящих объектов.

    minEvictableIdleTimeMillis

    1000 * 60 * 30

    Минимальное количество миллисекунд, в течение которых объекты, соответствующие условиям выселения, находятся в простое в пуле. Минимальная длительность освобождения простоящего соединения в миллисекундах.

    softMinEvictableIdleTimeMillis

    -1

    Минимальное количество миллисекунд, в течение которых объекты, соответствующие условиям выселения, находятся в простое в пуле.

    Простоящие соединения освобождаются после как минимум N миллисекунд, при условии, что в пуле сохраняется как минимум количество соединений, указанное параметром minIdle.

    Если miniEvictableIdleTimeMillis установлено в положительное число, выселитель простоящих соединений проверяет miniEvictableIdleTimeMillis сначала, а затем softMinEvictableIdleTimeMillis и minIdle условие.

    maxConnLifetimeMillis

    -1

    Максимальное время жизни соединения (в миллисекундах). Соединения, превышающие это время, завершаются при следующей активации, пассивации или проверке. Значение 0 или отрицательное значение означает неограниченное время жизни.

    logExpiredConnections

    true

    Записывать ли лог, когда просроченное соединение закрывается пулом. Если продолжительность жизни соединения превышает maxConnLifetimeMillis, он будет отозван пулом соединений, и по умолчанию будет создан лог. Если этот параметр установлен в false, лог не будет записан.

    connectionInitSqls

    N/A

    Этот параметр выполняет набор SQL‑запросов для инициализации физического соединения при его первом создании. Эти запросы выполняются только один раз для каждого соединения.

    lifo

    true

    Последний пришёл — первый ушёл.

    • Последний пришёл — первый ушёл. Если этот параметр установлен в true, пул соединений возвращает первое последнее используемое соединение (если в пуле имеются доступные неактивные соединения).
    • Если этот параметр установлен в false, пул работает как очередь FIFO и получает соединения из пула неактивных экземпляров соединений в порядке их возврата.

    poolPreparedStatements

    false

    Это определяет, будет ли применяться пул предобработки операторов в пуле соединений.

    maxOpenPreparedStatements

    N/A

    Максимальное количество операторов, которое может быть выделено в пуле операторов одновременно. Отрицательное значение означает отсутствие ограничения.

    Этот параметр также применяется к предобработанному пулу операторов. Когда пул операторов создаётся для каждого соединения, включаются предобработанные операторы, генерируемые следующим методом.

    public PreparedStatement prepareStatement(String sql)
    public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
    NOTE:

    Убедитесь, что соединения оставляют ресурсы для других операторов, задав maxOpenPreparedStatements значение меньше максимального количества курсоров.

    accessToUnderlyingConnectionAllowed

    false

    Это определяет, может ли PoolGuard получить доступ к нижележащим соединениям.

    removeAbandonedOnMaintenance

    removeAbandonedOnBorrow

    false

    Удалять ли заброшенные соединения, которые были заброшены дольше периода, указанного в removeAbandonedTimout.

    Если значение равно true, соединения, не использованные более чем removeAbandonedTimeout считаются заброшенными и удаляются.

    Создание или выполнение операторов сбрасывает lastUsed свойство родительского соединения.

    Установка этого параметра в true помогает восстанавливать соединения в приложениях с небольшим количеством операций записи.

    removeAbandonedTimeout

    300

    Интервал ожидания для удаления отброшенного соединения, в секундах.

    logAbandoned

    false

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

    abandonedUsageTracking

    false

    When this parameter is set to true, пул соединений записывает трассировки стека каждый раз, когда вызывается метод на соединении из пула, сохраняя последнюю трассировку стека для облегчения отладки оставленных соединений.

    NOTE:

    Setting this parameter to true will increase the overhead. Exercise caution when performing this operation.

    fastFailValidation

    false

    Этот параметр относится к быстрому завершению проверочных операторов, если происходит фатальное исключение, без выполнения isValid() или запрос проверки. Фатальные исключения включают конкретные SQL_STATE коды.

    • 57P01 (ADMIN SHUTDOWN)
    • 57P02 (CRASH SHUTDOWN)
    • 57P03 (CANNOT CONNECT NOW)
    • 01002 (SQL92 disconnect error)
    • JZ0C0 (Sybase disconnect error)
    • JZ0C1 (Sybase disconnect error)
    • Любой код SQL_STATE, начинающийся с "08"

    Коды исключений необходимо перезаписать. Для деталей смотрите disconnectionSqlCodes.

    disconnectionSqlCodes

    N/A

    Код исключения, который является кодом SQL_STATE, разделённым запятыми (,). Этот параметр действителен только когда fastFailValidation установлен в true.

    jmxName

    N/A

    This parameter registers a DataSource as a JMX MBean with a specified name that adheres to the JMX object name syntax.

    registerConnectionMBean

    true

    Нужно ли регистрировать и подключаться к JMX MBean.

Настройка пула соединений Hikari CP

  1. Скачать пакет драйвера JDBC. Для подробностей см Скачивание драйвера JDBC или ODBC.

  2. Добавьте пакеты драйверов JDBC, HikariCP и SLF4J в проект и настройте параметры, связанные с пулом подключений к базе данных.

    Таблица 2 Параметры пула подключений Hikari CP

    Параметр

    Значение по умолчанию

    Описание

    driverClassName

    Введите значение org.postgresql.Driver.

    Имя драйвера базы данных.

    jdbcUrl

    N/A

    URL для подключения к базе данных.

    username

    N/A

    Имя пользователя.

    password

    N/A

    Пароль.

    autoCommit

    true

    Определяет, следует ли автоматически отправлять транзакции, когда соединение возвращается в пул соединений.

    connectionTimeout

    30000

    Максимальный интервал таймаута для получения соединений из пула соединений.

    idleTimeout

    60000

    Максимальное время жизни простаивающего соединения. Этот параметр действует только когда значение minimumIdle меньше, чем maximumPoolSize.

    • Если количество простаивающих соединений больше значения minimumIdle и время простоя соединения больше значения idleTimeout, соединение удаляется из пула соединений.
    • 0 указывает отсутствие тайм‑аута.

    keepaliveTime

    0

    Интервал проверки наличия неиспользуемых соединений, в миллисекундах. 0 указывает, что функция отключена.

    maxLifetime

    1800000

    Максимальное время жизни соединения, в миллисекундах. 0 указывает отсутствие ограничения.

    connectionTestQuery

    N/A

    Выражение запроса для проверки соединения.

    minimumIdle

    10

    Минимальное количество неиспользуемых соединений. Для повышения производительности рекомендуется не задавать этот параметр. Размер пула соединений фиксирован.

    maximumPoolSize

    10

    Максимальное количество соединений.

    metricRegistry

    N/A

    Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.

    Этот параметр указывает экземпляр Codahale/Dropwizard MetricRegistry, используемый пулом для записи различных метрик.

    healthCheckRegistry

    N/A

    Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.

    Этот параметр указывает экземпляр Codahale/Dropwizard HealthCheckRegistry, используемый пулом для записи информации о состоянии.

    poolName

    N/A

    Имя пула соединений.

    initializationFailTimeout

    1

    Определяет, не удаётся ли пулу соединений быстро инициализироваться.

    • Если значение больше 0, система пытается получить соединение в течение указанного периода (connectionTimeout + initializationFailTimeout). Если не удалось, пул не включается, и генерируется исключение.
    • Если значение равно 0, система пытается получить и проверить соединение. Если проверка не удалась, пул не включается.
    • Если значение меньше 0, пул запускается без попытки инициализации соединения.

    isolateInternalQueries

    false

    Нужно ли изолировать запросы HikariCP в транзакции. Этот параметр действует, когда autoCommit установлен в false.

    allowPoolSuspension

    false

    Разрешить ли приостанавливать и возобновлять пул соединений через JMX. Когда пул соединений приостановлен, соединение не истекает до восстановления пула соединений.

    Только для чтения

    false

    Является ли соединение только для чтения.

    registerMbeans

    false

    Включить ли JMX.

    catalog

    N/A

    База данных по умолчанию catalog.

    connectionInitSql

    N/A

    SQL‑оператор, выполняемый после инициализации пула соединений.

    transactionIsolation

    N/A

    Уровень изоляции транзакций по умолчанию.

    validationTimeout

    5000

    Интервал тайм‑аута для обнаружения соединения. Значение должно быть больше значения connectionTimeout. Минимальное значение 250.

    leakDetectionThreshold

    0

    Максимальная продолжительность, в течение которой соединение может быть выдано.

    Минимальное значение — 2000 миллисекунд, используется для журналирования утечки соединения.

    schema

    N/A

    База данных по умолчанию schema.

    threadFactory

    N/A

    Это java.util.concurrent.ThreadFactory экземпляр, используемый пулом подключений для создания потоков. Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.

    scheduledExecutor

    N/A

    The java.util.concurrent.ScheduledExecutorService экземпляр, используемый пулом подключений для выполнения запланированных задач. Этот параметр может быть доступен только через программную конфигурацию или контейнер IoC.

Настройка пула подключений Druid

  1. Загрузите пакет драйвера JDBC. Для получения подробной информации см Загрузка драйвера JDBC или ODBC.

    Загрузите пакет драйвера Druid с https://druid.apache.org/downloads/.

  2. Добавьте пакеты драйверов JDBC и Druid в проект и настройте параметры, связанные с пулом подключений к базе данных.

    Таблица 3 Параметры пула соединений Druid

    Параметр

    Значение по умолчанию

    Описание

    url

    N/A

    URL для подключения к базе данных.

    имя пользователя

    N/A

    Имя пользователя.

    пароль

    N/A

    Пароль.

    driverClassName

    Введите значение org.postgresql.Driver.

    Имя драйвера базы данных.

    initialSize

    0

    Количество физических соединений, устанавливаемых при инициализации. Инициализация происходит, когда init метод вызывается явно или когда getConnection метод вызывается в первый раз.

    maxActive

    8

    Максимальное количество соединений в пуле потоков.

    minIdle

    0

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

    connectTimeout

    N/A

    Интервал тайм‑аута для подключения к базе данных в миллисекундах.

    socketTimeout

    N/A

    Интервал тайм‑аута сокета для подключения к базе данных в миллисекундах.

    maxWait

    -1

    Время ожидания нового запроса, когда соединения в пуле соединений исчерпаны, в миллисекундах.

    –1 указывает бесконечное ожидание до истечения таймаута.

    poolPreparedStatements

    false

    Определяет, кэшировать ли preparedStatement, то есть PSCache. PSCache значительно повышает производительность базы данных, поддерживающей курсоры.

    maxOpenPreparedStatements

    N/A

    Если PSCache включён, значение этого параметра должно быть больше 0.

    Если значение больше 0, poolPreparedStatements будет автоматически установлено в true.

    validationQuery

    SELECT 1

    SQL‑запрос, используемый для проверки того, является ли соединение действительным.

    Если validationQuery равен null, то testOnBorrow, testOnReturn, и testWhileIdle параметры не вступают в силу, потому что эти три параметра используются для проверки достоверности соединения с базой данных путем выполнения SQL‑запроса, указанного в validationQuery.

    testOnBorrow

    N/A

    При запросе соединения, validationQuery команда проверяет его достоверность. Эта конфигурация может снижать производительность, поэтому используйте её с осторожностью.

    testOnReturn

    N/A

    Когда соединение возвращается, то validationQuery команда проверяет его корректность. Эта конфигурация также может влиять на производительность, поэтому используйте её с осторожностью.

    testWhileIdle

    true

    Определяет, следует ли проверять соединение при запросе. Лучше всего установить этот параметр в true чтобы обеспечить безопасность без снижения производительности. Если время простоя превышает значение timeBetweenEvictionRunMills, запуская validationQuery команда для проверки корректности соединения не будет иметь эффекта.

    timeBetweenEvictionRunsMillis

    60s

    Эта validationQuery команда проверяет действительность соединения. Если количество неактивных соединений превышает minIdle, лишние соединения закрываются. Если доступно меньше неактивных соединений, добавляются новые. Соединения, не использованные в течение времени, указанного в timeBetweenEvictionRunsMillis отключены.

    Этот параметр также:

    1. Устанавливает интервал для потока Destroy, проверяющего соединения.
    2. Служит ссылкой для проверки testWhileIdle. Для получения подробностей см. описание testWhileIdle атрибут.

    minEvictableIdleTimeMillis

    30min

    Максимальное время жизни неактивного соединения до удаления. Если время с последней активности превышает minEvictableIdleTimeMillis, соединение закрывается потоком Destroy.

    ПРИМЕЧАНИЕ:

    Этот параметр конфликтует с timeBetweenEvictionRunsMillis параметр. Вы можете оставить этот параметр пустым.

    connectionInitSqls

    N/A

    SQL‑запрос выполняется при инициализации физического соединения.

    exceptionSorter

    N/A

    Когда база данных генерирует некоторые необратимые исключения, соединение отбрасывается.

    фильтры

    N/A

    Этот параметр настраивает расширенный плагин с использованием алиаса. Тип атрибута — строка. Распространённые плагины включают фильтры, используемые для мониторинга и статистики:

    • stat: статистика мониторинга
    • log4j: запись журнала
    • стена: предотвращение SQL injection

    proxyFilters

    N/A

    Тип List<com.alibaba.druid,filter.Filter>. Вы можете настроить оба фильтр и proxyFilters.

    removeAbandoned

    false

    Указывает, следует ли восстанавливать утечку соединений.

    Когда getNumActive() подходы getMaxActive(), система освобождает недействительные соединения, не использованные в течение removeAbandonedTimeout период (по умолчанию 300 секунд). Соединения, превышающие этот тайм-аут, принудительно закрываются.

    removeAbandonedTimeout

    300s

    Ограничение времени для Druid принудительно высвобождать соединения, в секундах. Druid принудительно высвободит соединение из пула после того, как пройдет указанное время с момента установления соединения, начиная с момента, когда программа получает соединение из пула.

    logAbandoned

    false

    Нужно ли выводить лог при высвобождении утёкших соединений.

    Этот параметр указывает, следует ли записывать информацию о стекe текущего потока в логи, когда removeAbandoned происходит.

    removeAbandonedTimeoutMillis

    5min

    Интервал тайм-аута для высвобождения соединений. Если removeAbandoned установлен в true, Druid периодически проверяет, переполняется ли пул потоков. Если пул потоков не находится в рабочем состоянии и указанное время превышено, пул потоков восстанавливается.

    maxEvictableIdleTimeMillis

    7 часов

    Максимальное время простоя. Значение по умолчанию — 7 часов.

    maxPoolPrepareStatementPerConnectionSize

    20

    Максимальное количество SQL‑запросов, которые могут кэшироваться для каждого соединения.

    keepAlive

    false

    Количество соединений minIdle, которые необходимо поддерживать при инициализации пула.

    Если количество соединений падает ниже minIdle и время простоя превышает minEvictableIdleTimeMillis, the keepAlive операция выполняется для поддержания minIdle значение.

    notFullTimeoutRetryCount

    0

    Количество попыток повторения, когда сумма количества арендованных соединений в пуле соединений и количества доступных соединений меньше максимально разрешённого количества соединений. Значение по умолчанию 0.

    logSlowSql

    false

    Определяет, выводить ли медленные SQL‑запросы.

  3. Используйте пул соединений Druid, основываясь на следующем примере.

    Создайте db.properties файл в ресурс директория.

    # Database connection parameters
    url=jdbc:postgresql://10.10.0.13:8000/gaussdb
    username=user
    password=pass
    validationQuery=select 1
    validationQueryTimeout=300
    #driverClassName=JDBC driver name
    driverClassName=org.postgresql.Driver
    # Number of initialized connections
    initialSize=1
    # Maximum number of connections
    maxActive=20
    # Number of core threads. If the number of core threads is greater than this configured value, the threads are released.
    minIdle=10

    Пример кода:

    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    import com.alibaba.druid.pool.DruidPooledConnection;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Properties;
    public class TestDataSource {
    private static DruidDataSource dataSource;
    public static void main(String[] args) throws Exception {
    Properties properties = loadProperties();
    dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
    dataSource.setTimeBetweenEvictionRunsMillis(50 * 1000);
    dataSource.setRemoveAbandoned(true);
    dataSource.setRemoveAbandonedTimeout(120);
    dataSource.setSocketTimeout(5000);
    dataSource.setConnectTimeout(5000);
    dataSource.setQueryTimeout(5);
    final DruidPooledConnection connection = dataSource.getConnection();
    final Statement statement = connection.createStatement();
    execute(statement);
    }
    public static void execute(Statement statement) {
    ResultSet resultSet = null;
    try {
    resultSet = statement.executeQuery("select 1");
    while (resultSet.next()) {
    String str = resultSet.getString(1);
    System.out.println("n1 :" + str);
    return;
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    /**
    * Load the configuration file and obtain parameters from the configuration file.
    */
    public static Properties loadProperties() {
    InputStream inputStream = TestDataSource.class.getClassLoader().getResourceAsStream("db.properties");
    Properties ps = new Properties();
    try {
    ps.load(inputStream);
    } catch (IOException e) {
    e.printStackTrace();
    }
    return ps;
    }
    }