1. Обзор
Этот учебник является продолжением статьи « Введение в jOOQ с помощью Spring », в которой рассматриваются способы использования jOOQ в приложении Spring Boot.
Если вы еще не ознакомились с этим учебным пособием, просмотрите его и следуйте инструкциям в разделе 2, посвященном зависимостям Maven, и в разделе 3, посвященном генерации кода. Это создаст исходный код для классов Java, представляющих таблицы в образце базы данных, включая Author
, Book
и AuthorBook
.
2. Конфигурация Maven
В дополнение к зависимостям и подключаемым модулям, как в предыдущем руководстве, в файл Maven POM необходимо включить несколько других компонентов, чтобы jOOQ работал с Spring Boot.
2.1. Управление зависимостями
Самый распространенный способ использования Spring Boot — наследовать от проекта spring-boot-starter-parent
, объявив его в родительском
элементе. Однако этот метод не всегда подходит, поскольку он навязывает цепочку наследования, которая во многих случаях может не соответствовать требованиям пользователей.
В этом руководстве используется другой подход: делегирование управления зависимостями Spring Boot. Чтобы это произошло, просто добавьте следующий элемент dependencyManagement в файл POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2. Зависимости
Чтобы Spring Boot мог управлять jOOQ, необходимо объявить зависимость от артефакта spring-boot-starter-jooq
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jooq</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
Обратите внимание, что в этой статье основное внимание уделяется дистрибутиву jOOQ с открытым исходным кодом. Если вы хотите работать с коммерческими дистрибутивами, ознакомьтесь с Руководством по использованию коммерческих дистрибутивов jOOQ с Spring Boot в официальном блоге.
3. Конфигурация весенней загрузки
3.1. Начальная конфигурация загрузки
Прежде чем мы перейдем к поддержке jOOQ, мы собираемся начать подготовку с помощью Spring Boot.
Во-первых, мы воспользуемся преимуществами поддержки сохраняемости и улучшений в Boot, а также нашей информацией о доступе к данным в стандартном файле application.properties .
Таким образом, мы можем пропустить определение bean-компонентов и сделать их настраиваемыми через отдельный файл свойств.
Мы добавим URL-адрес и учетные данные здесь, чтобы определить нашу встроенную базу данных H2:
spring.datasource.url=jdbc:h2:~/jooq
spring.datasource.username=sa
spring.datasource.password=
Мы также собираемся определить простое загрузочное приложение:
@SpringBootApplication
@EnableTransactionManagement
public class Application {
}
Мы оставим это простым и пустым, а все остальные объявления компонентов определим в другом классе конфигурации — InitialConfiguration
.
3.2. Конфигурация компонента
Давайте теперь определим этот класс InitialConfiguration
:
@Configuration
public class InitialConfiguration {
// Other declarations
}
Spring Boot автоматически сгенерировал и настроил bean- компонент dataSource
на основе свойств, установленных в файле application.properties
, поэтому нам не нужно регистрировать его вручную. Следующий код позволяет внедрить автоматически сконфигурированный компонент DataSource
в поле и показывает, как этот компонент используется:
@Autowired
private DataSource dataSource;
@Bean
public DataSourceConnectionProvider connectionProvider() {
return new DataSourceConnectionProvider
(new TransactionAwareDataSourceProxy(dataSource));
}
Поскольку компонент с именем transactionManager
также был автоматически создан и настроен Spring Boot, нам не нужно объявлять какой-либо другой компонент типа DataSourceTransactionManager
, как в предыдущем руководстве, чтобы воспользоваться преимуществами поддержки транзакций Spring.
Компонент DSLContext
создается так же, как в классе PersistenceContext
из предыдущего руководства:
@Bean
public DefaultDSLContext dsl() {
return new DefaultDSLContext(configuration());
}
Наконец, реализация Configuration
должна быть предоставлена DSLContext
. Поскольку Spring Boot может распознавать используемый диалект SQL по наличию артефакта H2 в пути к классам, настройка диалекта больше не требуется:
public DefaultConfiguration configuration() {
DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
jooqConfiguration.set(connectionProvider());
jooqConfiguration
.set(new DefaultExecuteListenerProvider(exceptionTransformer()));
return jooqConfiguration;
}
4. Использование Spring Boot с jOOQ
Чтобы упростить демонстрацию поддержки Spring Boot для jOOQ, тестовые примеры в преквеле этого руководства используются повторно с небольшими изменениями в аннотациях на уровне класса:
@SpringApplicationConfiguration(Application.class)
@Transactional("transactionManager")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringBootTest {
// Other declarations
}
Понятно, что вместо того, чтобы принимать аннотацию @ContextConfiguration
, Spring Boot использует @SpringApplicationConfiguration
, чтобы использовать загрузчик контекста SpringApplicationContextLoader
для тестирования приложений.
Методы тестирования для вставки, обновления и удаления данных точно такие же, как и в предыдущем руководстве. Пожалуйста, ознакомьтесь с разделом 5 этой статьи об использовании jOOQ с Spring для получения дополнительной информации. Все тесты должны быть успешно выполнены с новой конфигурацией, доказывая, что jOOQ полностью поддерживается Spring Boot.
5. Вывод
В этом руководстве более подробно рассматривается использование jOOQ с Spring. В нем представлены способы, с помощью которых приложение Spring Boot может использовать преимущества jOOQ для взаимодействия с базой данных безопасным для типов способом.
Реализацию всех этих примеров и фрагментов кода можно найти в проекте на GitHub .