Перейти к основному содержимому

Поддержка Spring Boot для jOOQ

· 4 мин. чтения

Задача: Наибольшая подстрока без повторений

Для заданной строки s, найдите длину наибольшей подстроки без повторяющихся символов. Подстрока — это непрерывная непустая последовательность символов внутри строки...

ANDROMEDA 42

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 .