До 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 добавляет в ваше приложение наиболее распространенные зависимости и разумную конфигурацию по умолчанию. Единственное, что вам нужно добавить, это информацию о подключении к вашей базе данных.

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