«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.