пройти черезпредыдущий разделобучения, мы научились применять SpringJdbcTemplate
Для завершения операций чтения и записи в базу данных MySQL. Далее в этой статье я сосредоточусь на важном понятии в процессе доступа к базе данных: источнике данных (Data Source), а также на создании и настройке источников данных в Spring Boot.
Базовые концепты
Прежде чем мы начнем объяснять конфигурацию источника данных в Spring Boot, давайте проясним эти основные понятия о доступе к данным:
Что такое JDBC?
Java Database Connectivity (сокращенно JDBC) — это интерфейс прикладной программы на языке Java, используемый для стандартизации доступа клиентских программ к базе данных, предоставляя такие методы, как запрос и обновление данных в базе данных. JDBC также является товарным знаком Sun Microsystems. Обычно мы говорим, что JDBC ориентирован на реляционные базы данных.
JDBC API в основном находится в JDK.java.sql
в пакете (содержимое расширения после этого находится вjavax.sql
package), в основном включая (курсивом обозначены интерфейсы, которые должны быть реализованы поставщиком драйвера):
- DriverManager: отвечает за загрузку различных драйверов (драйвер) и, в соответствии с различными запросами, возвращает вызывающей стороне соответствующее соединение с базой данных (соединение).
- Драйвер: Драйвер загрузится в DriverManager, обработает соответствующий запрос и вернет соответствующее соединение с базой данных (Connection).
- Соединение: соединение с базой данных, отвечающее за связь с базой данных, выполнение SQL и обработку транзакций выполняются в определенной среде соединения. Операторы могут быть сгенерированы для выполнения SQL.
- Оператор: используется для выполнения SQL-запросов и обновлений (для статических операторов SQL и одиночного выполнения). PreparedStatement: используется для выполнения SQL-запросов и обновлений с динамическими параметрами (компилируется на стороне сервера, что позволяет повторять выполнение для повышения эффективности).
- CallableStatement: используется для вызова хранимых процедур в базе данных.
- SQLException: представляет исключение (то есть ошибку) во время установления и закрытия соединения с базой данных и выполнения инструкции SQL.
Что такое источник данных?
Видно, что вjava.sql
Нет понятия источника данных (Data Source). Это связано сjava.sql
Включен API ядра JDBC, а такжеjavax.sql
package, который содержит расширение API стандарта JDBC. А определение источника данных (Data Source) находится вjavax.sql
в этом пакете расширения.
На самом деле, с реализацией API ядра JDBC уже можно получить доступ к базе данных, так зачем нам все еще нужен источник данных? В основном для следующих целей:
- Инкапсулируйте различные параметры доступа к базе данных для обеспечения унифицированного управления
- Сократите накладные расходы и повысьте эффективность благодаря управлению пулом соединений с вашей базой данных.
В бесплатной и открытой экосистеме 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
содержание:
- Гитхаб:GitHub.com/first87112/sp…
- Гостиница:git ee.com/brother space/S…
Если вы считаете, что эта статья хороша, добро пожаловатьStar
Поддержите, ваше внимание - движущая сила моего упорства!
использованная литература
- Энциклопедия Baidu: JDBC
- Официальная документация HikariCP
- Конфигурация HikariDataSource по умолчанию для Spring Boot
Добро пожаловать, чтобы обратить внимание на мой общедоступный номер: Programmer DD, получить эксклюзивные учебные ресурсы и ежедневный толчок галантерейных товаров. Если вас интересует мой рекомендуемый контент, вы также можете подписаться на мой блог:didispace.com