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

Поддержка 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.