Настройка Spring Data JPA с помощью Spring Boot

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

До Spring Boot разработки вам нужно сделать несколько вещей, чтобы настроить Spring Data JPA . Вам не только нужно было аннотировать свои классы сущностей с помощью аннотаций преобразования, добавить Spring Data JPA зависимость и настроить соединение с базой данных. Вам также нужно включить репозитории и управление транзакциями и настроить EntityManagerFactory. Это - повторяющаяся и раздражающая задача.

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

В этой статье объясняется конфигурация Spring Boot по умолчанию для Spring Data JPA, какие параметры конфигурации вы можете использовать для ее изменения, а также конфигурацию, которую вы, возможно, захотите добавить.

Обязательные зависимости

Прежде чем вы сможете приступить к настройке Spring Data JPA, вам необходимо добавить его в свое приложение. В приложении Spring Boot это обычно означает, что вам нужно добавить правильный стартер в зависимости вашего проекта. Самый простой способ сделать это для нового проекта - использовать Spring Initializr для настройки процесса сборки и добавления всех необходимых зависимостей. Для всех проектов Spring Boot вам необходимо добавить модуль spring-boot-starter-data-jpa .

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

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

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>${postgresql.version}</version>
</dependency>

Конфигурация по умолчанию

Как упоминалось ранее, интеграция Spring Boot со Spring Data JPA обеспечивает обширную конфигурацию по умолчанию и добавляет большинство необходимых зависимостей в ваш проект. Она включает в себя:

  • зависимость от пула соединений HikariCP и базовой конфигурации по умолчанию. Вы можете установить все параметры конфигурации HikariCP в файле application.properties , добавив префикс spring.datasource.hikari к имени параметра.

  • создание базы данных в памяти H2, HSQL или Derby, если ваш путь к классам содержит соответствующий драйвер JDBC.

  • зависимость от Hibernate в качестве вашей реализации JPA и требуемую конфигурацию для создания экземпляра EntityManagerFactory.

  • зависимость и необходимая конфигурация для управления вашими транзакциями с помощью встроенного менеджера транзакций Atomikos.

  • необходимая конфигурация для использования репозиториев Spring Data JPA.

Примечание: поскольку Spring Data JPA использует Hibernate в качестве реализации JPA по-умолчанию, вы можете использовать все, что вы знаете о Hibernate, со Spring Data JPA.

Как видите, это в основном все, что вам ранее приходилось настраивать в своем классе конфигурации. Вот почему большинство проектов предпочитают использовать Spring Boot классическому Spring.

Если вы используете базу данных в памяти, вам не нужно предоставлять какую-либо настраиваемую конфигурацию. Конфигурации Spring Boot по умолчанию обычно достаточно для всех малых и средних приложений.

Большинство корпоративных приложений используют автономную базу данных, например, сервер базы данных PostgreSQL или Oracle. В этом случае вам нужно только предоставить URL-адрес, имя пользователя и пароль для подключения к этой базе данных. Вы можете сделать это, установив следующие 3 свойства конфигурации в файле application.properties .

spring.datasource.url=jdbc:postgresql://localhost:5432/test
spring.datasource.username=postgres
spring.datasource.password=postgres

Настройка конфигурации по умолчанию

Просто потому, что Spring Data JPA автоматически интегрирует несколько других проектов Spring и настраивает их для вас, вы не обязаны их использовать. Вы можете легко изменить поведение и интеграцию по умолчанию, указав различные зависимости и добавив несколько параметров в свою конфигурацию.

Использование другого пула подключений

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Затем Spring Boot пытается найти следующие реализации пула соединений в описанном порядке в пути к классам и использует первую из найденных:

  • Пул соединений Tomcat,

  • Commons DBCP2,

  • Oracle UCP.

Если вы не хотите полагаться на сканирование пути к классам вашего приложения, вы также можете явно указать пул соединений, настроив свойство spring.datasource.type .

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

После того, как вы изменили пул соединений, вы можете установить все свои стандартные параметры конфигурации в application.properties файл путем добавления префикса spring.datasource.tomcat, spring.datasource.dbcp2 или spring.datasource.oracleucp с именем параметра.

Использование Bitronix Transaction Manager

В прошлом Bitronix был популярным менеджером транзакций в приложениях Spring. Поддержка Spring Boot для него устарела и будет удалена в будущем.

Если вы все еще хотите его использовать, вы можете добавить в свое приложение зависимость от spring-boot-starter-jta-bitronix . Затем Spring Boot будет включать все необходимые зависимости и настраивать Bitronix для управления вашими транзакциями.

Деактивация репозиториев Spring Data JPA

Я рекомендую использовать репозитории Spring Data JPA. Они значительно упрощают реализацию вашей персистентности, предоставляя набор стандартных методов для сохранения, чтения и удаления сущностей. Они также предоставляют такие функции, как производные и настраиваемые запросы.

Если вы решите не использовать эти функции, вы можете деактивировать все репозитории JPA в своей конфигурации.

spring.data.jpa.repositories.enabled=false

Дополнительный параметр конфигурации, который вы должны знать

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

Настройка ведения журнала

Как объясняется в Руководстве по ведению журнала Hibernate рекомендовано использовать 2 разные конфигурации ведения журнала для среды разработки и рабочей среды. Это, конечно, меняется не при настройке Spring Data JPA. Используя Spring Boot, вы можете настроить уровни журнала для всех категорий Hibernate в файле application.properties , добавив префикс logging.level к имени категории журнала.

Конфигурация среды разработки

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

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

logging.level.org.hibernate=INFO
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.cache=DEBUG
logging.level.org.hibernate.stat=DEBUG

Она активирует статистический компонент Hibernate. Он предоставляет вам сводную информацию о количестве и времени, затраченном Hibernate на выполнение наиболее важных операций во время каждого сеанса. Он также добавляет все выполненные операторы SQL в файл журнала и показывает, как Hibernate использовал кеш 2-го уровня.

Spring Boot также поддерживает параметр spring.jpa.show-sql, чтобы включить ведение журнала операторов SQL. Но вам лучше избегать этого, по2тому что он игнорирует вашу структуру ведения журнала и записывает операторы SQL непосредственно в стандартный вывод.

Конфигурация рабочей среды

В рабочей среде вы должны установить уровень журнала Hibernate на ERROR, чтобы сократить накладные расходы как можно меньше.

logging.level.org.hibernate=ERROR

Настройка свойств JPA и Hibernate

Когда вы используете JPA и Hibernate без Spring Data JPA, вы обычно настраиваете его с помощью файла persistence.xml. В элементе свойств этого XML-файла вы можете указать параметры конфигурации, зависящие от поставщика.

Вы можете установить все эти параметры в файле application.properties , добавив префикс spring.jpa.properties к имени свойства конфигурации.

spring.jpa.properties.hibernate.generate_statistics=true

Настройка создания базы данных

По умолчанию Spring Boot автоматически создает для вас базы данных в памяти. Эта функция отключена для всех остальных баз данных. Вы можете активировать ее, установив для свойства spring.jpa.hibernate.ddl-auto значения: nonevalidateupdate или create-drop .

Рекомендуется вместо этого использовать Spring Boot's Flyway или интеграцию с Liquibase . Они более мощные и дают вам полный контроль над определением структур ваших таблиц.

Вывод

Spring Boot стартер для Spring Data JPA добавляет в ваше приложение наиболее распространенные зависимости и разумную конфигурацию по умолчанию. Единственное, что вам нужно добавить, это информацию о подключении к вашей базе данных.

Но это не значит, что вам обязательно нужно использовать эти значения по умолчанию. Как вы узнали из этой статьи, вы можете легко заменить все зависимости по умолчанию и настроить конфигурацию по умолчанию по своим требованиям.

Источник: https://habr.com/ru/post/545798/


Интересные статьи

Интересные статьи

Существуют разные способы создания монорепозитория в node.js, есть разные библиотеки для этих целей: yarn workspaces, lerna и так далее. Но сегодня я хочу коротко рассказ...
Всем привет, меня зовут Олег, я техлид в ДомКлике. В нашей команде ядром стека является Kotlin и Spring Boot. Хочу поделиться с вами своим опытом по взаимодействию и особенностях ра...
Привет! Это наш первый релиз из дома. DataGrip и другие наши IDE с поддержкой баз данных теперь умеют больше. Читать дальше →
Невозможно объективно измерить, какие девушки красивее: блондинки или брюнетки, смуглые или белокожие, высокие или миниатюрные. Но можно посчитать, какие черты внешности упоминают чаще, когда гов...
За последние несколько лет концепция монорепозиториев успешно зарекомендовала себя, так как позволяет значительно упростить процесс разработки модульных программных проектов, таких как инфрас...