Поддержка Spring Boot для jOOQ
1. обзор
Это руководство является продолжением статьиIntroduction to jOOQ with 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, объявив его в элементеparent. Однако этот метод не всегда подходит, поскольку навязывает цепочку наследования, которая во многих случаях может не соответствовать потребностям пользователей.
В этом руководстве используется другой подход: делегирование управления зависимостями в Spring Boot. Чтобы это произошло, просто добавьте следующий элементdependencyManagement в файл POM:
org.springframework.boot
spring-boot-dependencies
1.3.5.RELEASE
pom
import
2.3. зависимости
Чтобы Spring Boot управлял jOOQ, необходимо объявить зависимость от артефактаspring-boot-starter-jooq:
org.springframework.boot
spring-boot-starter-jooq
1.3.5.RELEASE
Обратите внимание, что эта статья посвящена распространению jOOQ с открытым исходным кодом. Если вы хотите работать с коммерческими дистрибутивами, ознакомьтесь сGuide to Using jOOQ’s Commercial Distributions with Spring Boot в официальном блоге.
3. Конфигурация Spring Boot
3.1. Начальная настройка загрузки
Прежде чем мы перейдем к поддержке jOOQ, мы собираемся начать подготовку с помощью Spring Boot.
Во-первых, мы собираемся воспользоваться преимуществами поддержки постоянства и улучшений в Boot, а также нашей информацией о доступе к данным в стандартном файлеapplication.properties. Таким образом, мы можем пропустить определение бинов и сделать их настраиваемыми через отдельный файл свойств.
Мы добавим сюда URL-адрес и учетные данные, чтобы определить нашу встроенную базу данных H2:
spring.datasource.url=jdbc:h2:~/jooq
spring.datasource.username=sa
spring.datasource.password=
Мы также собираемся определить простое загрузочное приложение:
@SpringBootApplication
@EnableTransactionManagement
public class Application {
}
Мы оставим это одно простым и пустым, а все остальные объявления bean-компонентов определим в другом классе конфигурации -InitialConfiguration.
3.2. Конфигурация Бина
Теперь давайте определим этот классInitialConfiguration:
@Configuration
public class InitialConfiguration {
// Other declarations
}
Spring Boot автоматически сгенерировал и настроил bean-компонентdataSource на основе свойств, установленных в файлеapplication.properties, поэтому нам не нужно регистрировать его вручную. Следующий код позволяет автоматически настраивать bean-компонентDataSource для вставки в поле и показывает, как этот bean-компонент используется:
@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());
}
Наконец,DSLContext должна быть предоставлена реализацияConfiguration. Поскольку 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 для взаимодействия с базой данных безопасным для типов образом.
Реализацию всех этих примеров и фрагментов кода можно найти вa GitHub project.