«1. Обзор
Это руководство является продолжением статьи «Введение в jOOQ с помощью Spring», в которой рассматриваются способы использования jOOQ в приложении Spring Boot.
Если вы еще не ознакомились с этим руководством, просмотрите его и следуйте инструкциям в разделе 2, посвященном зависимостям Maven, и в разделе 3, посвященном генерации кода. Это создаст исходный код для классов Java, представляющих таблицы в образце базы данных, включая Author, Book и AuthorBook.
2. Конфигурация Maven
Помимо зависимостей и плагинов, как в предыдущем руководстве, в POM-файл Maven необходимо включить несколько других компонентов, чтобы jOOQ работал с Spring Boot.
2.1. Управление зависимостями
Самый распространенный способ использования Spring Boot — наследовать от проекта spring-boot-starter-parent, объявив его в родительском элементе. Однако этот метод не всегда подходит, поскольку он навязывает цепочку наследования, которая во многих случаях может не соответствовать требованиям пользователей.
В этом руководстве используется другой подход: делегирование управления зависимостями Spring Boot. Для этого просто добавьте в файл POM следующий элемент dependencyManagement:
<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 автоматически сгенерировал и настроил компонент 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.