До 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 значения: none, validate, update или create-drop .
Рекомендуется вместо этого использовать Spring Boot's Flyway или интеграцию с Liquibase . Они более мощные и дают вам полный контроль над определением структур ваших таблиц.
Вывод
Spring Boot стартер для Spring Data JPA добавляет в ваше приложение наиболее распространенные зависимости и разумную конфигурацию по умолчанию. Единственное, что вам нужно добавить, это информацию о подключении к вашей базе данных.
Но это не значит, что вам обязательно нужно использовать эти значения по умолчанию. Как вы узнали из этой статьи, вы можете легко заменить все зависимости по умолчанию и настроить конфигурацию по умолчанию по своим требованиям.