Использование пула соединений HikariCP в Spring Boot

Spring Boot Java

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

Подумав об этом, давайте напишем, как использовать пул соединений HikariCP в Spring Boot. Ведь в реальных боевых проектах JDBC использовать нельзя, а пул соединений необходим. HikariCP считается очень быстрым, и пул соединений с базой данных по умолчанию в Spring Boot 2 также был переключен с Tomcat на HikariCP (можете ли вы изменить вонючие жуки, которые любят новое и ненавидят старое).

Адрес GitHub HikariCP выглядит следующим образом:

GitHub.com/Бретт Шерсть Доктор…

В настоящее время звездочка составляет 12 тысяч, а количество использований достигло 43,1 тысячи. Давайте посмотрим на его представление о себе.

Это невозможно. Хикари происходит от японского, что означает "свет". Означает ли это скорость со скоростью света? Честно говоря, чтение введения кажется таким же захватывающим и шокирующим, как рукопожатие с моей богиней «Тан Вэй».

Поскольку Spring Boot 2 по умолчанию использует HikariCP, его довольно легко использовать, и для этого требуется всего несколько простых шагов.

01. Инициализируйте базу данных MySQL

Поскольку вы хотите подключиться к MySQL, вам необходимо установить службу MySQL на свой компьютер (пока пропустите эту статью) и создать базы данных и таблицы.

CREATE DATABASE `springbootdemo`;
DROP TABLE IF EXISTS `mysql_datasource`;
CREATE TABLE `mysql_datasource` (
  `id` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

02. Создайте проект Spring Boot с помощью Spring Initlallzr

Создать проект Spring Boot очень просто, через Spring Initlallzr (start.spring.io/) Это хорошо.

Проверьте три зависимости Web, JDBC и MySQL Driver.

1) Web указывает, что проект является веб-проектом, что нам удобно для работы напрямую через URL-адрес.

3) Драйвер MySQL: Драйвер, который подключается к серверу MySQL.

5) JDBC: Spring Boot 2 использует HikariCP по умолчанию, поэтому HikariCP по умолчанию добавит зависимости к spring-boot-starter-jdbc, поэтому нет необходимости активно добавлять зависимости HikariCP.

P.S. Как это доказать? После успешного импорта проекта в файле pom.xml нажмите и удерживайте левую кнопку мыши + клавишу Ctrl, чтобы получить доступ к узлу зависимости spring-boot-starter-jdbc, вы можете просмотреть информацию о зависимости HikariCP в файле spring-boot- файл start-jdbc.pom.

После выбора параметров вы можете нажать кнопку [Создать], чтобы сгенерировать инициализированный проект Spring Boot. Сгенерированный пакет представляет собой сжатый пакет, который необходимо распаковать перед импортом в IDE.

03. Отредактируйте файл application.properties

После успешного импорта проекта подождите, пока Maven загрузит зависимости, а затем отредактируйте файл application.properties, чтобы настроить информацию об источнике данных MySQL.

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springbootdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

Есть ли ощущение дежа вю (иПредыдущийконфигурация источника данных точно такая же)? Зачем? Ответ всем дан — дефолт, дефолт, дефолт, важные вещи говорить трижды, Spring Boot 2 по умолчанию использует пул соединений HikariCP.

04. Отредактируйте проект Spring Boot

Чтобы облегчить нам просмотр информации о подключении HikariCP, мы отредактировали класс SpringBootMysqlApplication и добавили следующее содержимое.

@SpringBootApplication
public class HikariCpDemoApplication implements CommandLineRunner {
	@Autowired
	private DataSource dataSource;

	public static void main(String[] args) {
		SpringApplication.run(HikariCpDemoApplication.class, args);
	}

	@Override
	public void run(String... args) throws Exception {
		Connection conn = dataSource.getConnection();
		conn.close();
	}
}

HikariCpDemoApplication реализует интерфейс CommandLineRunner, который позволяет нам загружать некоторые данные или выполнять некоторые действия при запуске проекта, например, мы пытаемся установить соединение с источником данных через объект DataSource, чтобы мы могли видеть информацию о соединении HikariCP. в информации журнала. В интерфейсе CommandLineRunner есть метод, который нужно реализовать, что мы и видимrun()метод.

Путем отладки мы можем увидеть, что в процессе выполнения проекта тип bean dataSource — HikariDataSource.

05. Запустите проект Spring Boot

Далее мы непосредственно запускаемHikariCpDemoApplicationclass, такой проект Spring Boot запускается успешно.

Информация о подключении объекта HikariDataSource будет напечатана. То есть конфигурация пула соединений HikariCP включена. Сделайте себе комплимент.

06. Почему Spring Boot 2.0 выбирает HikariCP в качестве пула соединений с базой данных по умолчанию

Есть несколько тестовых результатов, доступных для сравнения HikariCP с другими платформами пула соединений (например, *c3p0,dbcp2,tomcatвибур) производительность. Например, команда HikariCP опубликовала следующие бенчмарки (доступныздесьчтобы получить исходный результат):

Чтобы доказать свою лучшую производительность, команда HikariCP специально выбрала несколько фонов для сравнения. К сожалению, существуют традиционные пулы соединений, такие как c3p0, dbcp2, tomcat и т. д., которые служат фоном.

На картинке выше мы можем почувствовать смущение фона, HikariCP выделяется из толпы. HikariCP так хорош по следующим причинам:

1) Оптимизация на уровне байт-кода: Требуется, чтобы скомпилированный байт-код был минимальным, чтобы кэш ЦП мог загрузить больше программного кода.

Фрагмент кода до оптимизации HikariCP:

public final PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
{
    return PROXY_FACTORY.getProxyPreparedStatement(this, delegate.prepareStatement(sql, columnNames));
}

Оптимизированный HikariCP фрагмент кода:

public final PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
{
    return ProxyFactory.getProxyPreparedStatement(this, delegate.prepareStatement(sql, columnNames));
}

Единственная разница между приведенными выше двумя фрагментами кода заключается в том, что ProxyFactory заменяет PROXY_FACTORY, а измененный байт-код сокращает на 3 строки инструкций по сравнению с тем, что было до оптимизации. Для конкретного анализа обратитесь к Wiki HikariCP.Документация.

2) Используйте пользовательский список (FastStatementList) вместо ArrayList, чтобы избежатьget()проверьте диапазон, когдаremove()при сканировании от начала до конца.

07. Спасибо

Итак, читатели и друзья, статья, которая обещала Сяо Вану, наконец-то закончена.Здесь вы видите лучших программистов, именно вы получаете повышение и прибавку к зарплате.👍. Если вы не думаете, что это весело, и хотите увидеть больше, вы можете отметить GitHub второго брата【itwanger.github.io], эта статья была включена.

PS: исходный код, поддерживающий эту статью, был загружен на GitHub [SpringBootDemo.SpringBootMysql].

Оригинал это не просто, если вы чувствуете себя немного легко, пожалуйста, не так ли.какЕсли вы хотите впервые увидеть обновленные статьи второго брата, отсканируйте QR-код ниже и подпишитесь на официальный аккаунт Silent King Er. До встречи в нашей следующей статье!