Базовое руководство по Spring Boot 2.x: подробная настройка источника данных по умолчанию Hikari

Spring Boot задняя часть

пройти черезпредыдущий разделобучения, мы научились применять SpringJdbcTemplateДля завершения операций чтения и записи в базу данных MySQL. Далее в этой статье я сосредоточусь на важном понятии в процессе доступа к базе данных: источнике данных (Data Source), а также на создании и настройке источников данных в Spring Boot.

Базовые концепты

Прежде чем мы начнем объяснять конфигурацию источника данных в Spring Boot, давайте проясним эти основные понятия о доступе к данным:

Что такое JDBC?

Java Database Connectivity (сокращенно JDBC) — это интерфейс прикладной программы на языке Java, используемый для стандартизации доступа клиентских программ к базе данных, предоставляя такие методы, как запрос и обновление данных в базе данных. JDBC также является товарным знаком Sun Microsystems. Обычно мы говорим, что JDBC ориентирован на реляционные базы данных.

JDBC API в основном находится в JDK.java.sqlв пакете (содержимое расширения после этого находится вjavax.sqlpackage), в основном включая (курсивом обозначены интерфейсы, которые должны быть реализованы поставщиком драйвера):

  • DriverManager: отвечает за загрузку различных драйверов (драйвер) и, в соответствии с различными запросами, возвращает вызывающей стороне соответствующее соединение с базой данных (соединение).
  • Драйвер: Драйвер загрузится в DriverManager, обработает соответствующий запрос и вернет соответствующее соединение с базой данных (Connection).
  • Соединение: соединение с базой данных, отвечающее за связь с базой данных, выполнение SQL и обработку транзакций выполняются в определенной среде соединения. Операторы могут быть сгенерированы для выполнения SQL.
  • Оператор: используется для выполнения SQL-запросов и обновлений (для статических операторов SQL и одиночного выполнения). PreparedStatement: используется для выполнения SQL-запросов и обновлений с динамическими параметрами (компилируется на стороне сервера, что позволяет повторять выполнение для повышения эффективности).
  • CallableStatement: используется для вызова хранимых процедур в базе данных.
  • SQLException: представляет исключение (то есть ошибку) во время установления и закрытия соединения с базой данных и выполнения инструкции SQL.

Что такое источник данных?

Видно, что вjava.sqlНет понятия источника данных (Data Source). Это связано сjava.sqlВключен API ядра JDBC, а такжеjavax.sqlpackage, который содержит расширение API стандарта JDBC. А определение источника данных (Data Source) находится вjavax.sqlв этом пакете расширения.

На самом деле, с реализацией API ядра JDBC уже можно получить доступ к базе данных, так зачем нам все еще нужен источник данных? В основном для следующих целей:

  1. Инкапсулируйте различные параметры доступа к базе данных для обеспечения унифицированного управления
  2. Сократите накладные расходы и повысьте эффективность благодаря управлению пулом соединений с вашей базой данных.

В бесплатной и открытой экосистеме Java уже есть много отличных источников данных с открытым исходным кодом, из которых вы можете выбирать, например: DBCP, C3P0, Druid, HikariCP и т. д.

В Spring Boot 2.x выбор источников данных также следует тенденции, используя текущую лучшую производительность.HikariCP. Далее поговорим о конфигурации источника данных по умолчанию в Spring Boot.

Источник данных по умолчанию: HikariCP

Благодаря механизму автоматической настройки Spring Boot большую часть конфигурации источника данных можно изменить, настроив параметры. Только в некоторых особых случаях, таких как: изменение источника данных по умолчанию, сосуществование нескольких источников данных и т. д., необходимо изменить содержимое bean-компонента, который переопределяется и инициализируется. В этом разделе мы в основном говорим о настройке Hikari, поэтому в случае использования других источников данных или нескольких источников данных мы узнаем в следующих руководствах.

В автоматической настройке Spring Boot конфигурацию источников данных можно разделить на две категории:

  • Общая конфигурация: сspring.datasource.*Он существует в виде , в основном для некоторого общего контента, который необходимо настроить, даже если используются разные источники данных. Например: адрес ссылки на базу данных, имя пользователя, пароль и т. д. Я не буду вдаваться в подробности здесь, обычно только эти конфигурации:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  • Конфигурация пула соединений с источником данных: дляspring.datasource.<数据源名称>.*Существовать в виде, например: параметры конфигурации Hikarispring.datasource.hikari.*форма. Ниже приведены некоторые из наиболее часто используемых элементов конфигурации и соответствующие описания:
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=500000
spring.datasource.hikari.max-lifetime=540000
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.connection-test-query=SELECT 1

Смысл этих конфигураций:

  • spring.datasource.hikari.minimum-idle: минимальное бездействующее соединение, значение по умолчанию равно 10, если оно меньше 0 или больше максимального размера пула, оно будет сброшено до максимального размера пула.
  • spring.datasource.hikari.maximum-pool-size: максимальное количество подключений, меньше или равное 0, будет сброшено до значения по умолчанию 10; больше нуля и меньше 1 будет сброшено до значения минимального простоя
  • spring.datasource.hikari.idle-timeout: Время простоя соединения, значение по умолчанию 600000 (10 минут), если больше или равно max-lifetime и max-lifetime>0, то будет сброшено на 0, если не равно 0 и меньше 10 секунд, оно будет сброшено на 10 секунд.
  • spring.datasource.hikari.max-lifetime: Максимальное время выживания соединения, не равное 0 и менее 30 секунд, будет сброшено до значения по умолчанию 30 минут, настройка должна быть короче таймаута, установленного mysql
  • spring.datasource.hikari.connection-timeout: Время ожидания соединения: миллисекунды, менее 250 миллисекунд, в противном случае будет сброшено значение по умолчанию 30 секунд.
  • spring.datasource.hikari.connection-test-query: оператор запроса, используемый для проверки доступности соединения.

Более полные элементы конфигурации можно найти в следующей таблице:

name описывать Значение конструктора по умолчанию Значение после проверки конфигурации по умолчанию подтвердить сброс
autoCommit Автоматически фиксируйте соединения, возвращенные из пула TRUE TRUE
connectionTimeout Максимальное количество миллисекунд ожидания соединения из пула SECONDS.toMillis(30) = 30000 30000 Если менее 250 мс, сбросить до 30 с.
idleTimeout Максимальное время, в течение которого соединение может простаивать в пуле. MINUTES.toMillis(10) = 600000 600000 Если idleTimeout+1 секунды>maxLifetime и maxLifetime>0, он будет сброшен на 0 (что означает, что никогда не выходить); если idleTimeout!=0 и меньше 10 секунд, он будет сброшен на 10 секунд
maxLifetime Максимальное время жизни соединения в пуле MINUTES.toMillis(30) = 1800000 1800000 Если не равно 0 и меньше 30 секунд, оно будет сброшено обратно на 30 минут.
connectionTestQuery Если ваш драйвер поддерживает JDBC4, мы настоятельно рекомендуем вам не устанавливать это свойство. null null
minimumIdle Минимальное количество простаивающих соединений, поддерживаемых в пуле -1 10 minIdlemaxPoolSize сбрасывается до maxPoolSize
maximumPoolSize Максимальное количество подключений в пуле, включая незанятые и используемые подключения -1 10 Если maxPoolSize меньше 1, он будет сброшен. Когда minIdle0, он сбрасывается в значение minIdle
metricRegistry Это свойство позволяет указать экземпляр Codahale/Dropwizard MetricRegistry, который будет использоваться пулом для записи различных метрик. null null
healthCheckRegistry Это свойство позволяет указать экземпляр Codahale/Dropwizard HealthCheckRegistry, используемый пулом для предоставления текущей информации о работоспособности. null null
poolName Определяемое пользователем имя пула соединений, которое появляется в основном в журнале и консоли управления JMX для идентификации пула и конфигурации пула. null HikariPool-1
initializationFailTimeout Это свойство определяет, будет ли пул быстро выходить из строя, если пул не может успешно инициализировать соединение. 1 1
isolateInternalQueries Следует ли изолировать запросы внутреннего пула в их собственных транзакциях, таких как тесты живучести соединения. FALSE FALSE
allowPoolSuspension Определяет, можно ли приостановить и возобновить работу пула через JMX. FALSE FALSE
readOnly Находятся ли соединения, полученные из пула, в режиме только для чтения по умолчанию FALSE FALSE
registerMbeans Следует ли регистрировать компоненты управления JMX (MBeans) FALSE FALSE
catalog Установите каталог по умолчанию для баз данных, поддерживающих концепцию каталога. driver default null
connectionInitSql Это свойство задает оператор SQL, который выполняется после создания каждого нового подключения и перед его добавлением в пул. null null
driverClassName HikariCP попытается разрешить драйвер только с помощью DriverManager на основе jdbcUrl, но для некоторых старых драйверов также необходимо указать driverClassName. null null
transactionIsolation Управляет уровнем изоляции транзакций по умолчанию для соединений, возвращаемых из пула. null null
validationTimeout Максимальное количество времени, в течение которого соединение будет тестироваться активным. SECONDS.toMillis(5) = 5000 5000 Если менее 250 мс, он будет сброшен до 5 с.
leakDetectionThreshold Время, в течение которого соединение может покинуть пул, прежде чем будет записано сообщение, указывающее на возможную утечку соединения. 0 0 Если он больше 0 и это не модульный тест, он будет дополнительно оценен: (leakDetectionThreshold maxLifetime && maxLifetime > 0), он будет сброшен на 0. То есть, чтобы он вступил в силу, он должен быть > 0 и не может быть меньше 2 секунд и не может быть больше maxLifetime, если maxLifetime > 0.
dataSource Это свойство позволяет вам напрямую установить экземпляр источника данных, который будет обернут пулом, вместо того, чтобы HikariCP создавал его с помощью отражения. null null
schema Это свойство задает схему по умолчанию для баз данных, поддерживающих концепцию схемы. driver default null
threadFactory Это свойство позволяет вам установить экземпляр java.util.concurrent.ThreadFactory, который будет использоваться для создания всех потоков, используемых пулом. null null
scheduledExecutor Это свойство позволяет вам установить экземпляр java.util.concurrent.ScheduledExecutorService, который будет использоваться для различных внутренних запланированных задач. null null

пример кода

Примеры этой статьи можно найти в следующем репозиторииchapter3-2содержание:

Если вы считаете, что эта статья хороша, добро пожаловатьStarПоддержите, ваше внимание - движущая сила моего упорства!

использованная литература

Добро пожаловать, чтобы обратить внимание на мой общедоступный номер: Programmer DD, получить эксклюзивные учебные ресурсы и ежедневный толчок галантерейных товаров. Если вас интересует мой рекомендуемый контент, вы также можете подписаться на мой блог:didispace.com