jOOQ的Spring Boot支持

2023/05/18

1. 概述

本教程是jOOQ与Spring简介文章的后续,涵盖了在Spring Boot应用程序中使用jOOQ的方法。

如果你还没有完成该教程,请查看它并按照有关Maven依赖项的第2部分和有关代码生成的第3部分中的说明进行操作。这将为表示示例数据库中表的Java类生成源代码,包括Author、Book和AuthorBook。

2. Maven配置

除了前面教程中的依赖项和插件之外,Maven POM文件中还需要包含其他几个组件,以使jOOQ与Spring Boot一起工作。

2.1 依赖管理

使用Spring Boot最常见的方法是通过在parent元素中声明它来继承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. Spring Boot配置

3.1 初始Boot配置

在我们获得jOOQ支持之前,我们将开始使用Spring Boot做准备。

首先,我们将利用Boot中的持久性支持和改进以及标准application.properties文件中的数据访问信息。这样,我们可以跳过定义bean并通过单独的属性文件使它们可配置。

我们将在此处添加URL和凭据来定义我们的嵌入式H2数据库:

spring.datasource.url=jdbc:h2:~/jooq
spring.datasource.username=sa
spring.datasource.password=

我们还将定义一个简单的Boot应用程序:

@SpringBootApplication
@EnableTransactionManagement
public class Application {
}

我们保留这个主类简单和空,我们将在另一个配置类InitialConfiguration中定义所有其他bean声明。

3.2 Bean配置

现在让我们定义这个InitialConfiguration类:

@Configuration
public class InitialConfiguration {
    // Other declarations
}

Spring Boot已经根据application.properties文件中设置的属性自动生成并配置了dataSource bean,因此我们不需要手动注册它。下面的代码将自动配置的DataSource bean被注入到一个字段中,并展示了这个bean是如何使用的:

@Autowired
private DataSource dataSource;

@Bean
public DataSourceConnectionProvider connectionProvider() {
    return new DataSourceConnectionProvider (new TransactionAwareDataSourceProxy(dataSource));
}

由于名为transactionManager的bean也已由Spring Boot自动创建和配置,因此我们无需像上一教程那样声明任何其他DataSourceTransactionManager类型的bean即可利用Spring事务支持。

DSLContext bean的创建方式与前面教程的PersistenceContext类中的方式相同:

@Bean
public DefaultDSLContext dsl() {
    return new DefaultDSLContext(configuration());
}

最后,需要向DSLContext提供配置实现。由于Spring Boot能够通过类路径上存在的H2工件来识别正在使用的SQL方言,因此不再需要方言配置:

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
}

很明显,Spring Boot没有采用@ContextConfiguration注解,而是使用@SpringApplicationConfiguration来利用SpringApplicationContextLoader上下文加载器来测试应用程序。

插入、更新、删除数据的测试方法与上一篇教程完全相同。请查看有关将jOOQ与Spring结合使用的文章的第5节以获取更多信息。所有测试都应该使用新配置成功执行,证明jOOQ完全受Spring Boot支持。

5. 总结

本教程深入探讨了jOOQ与Spring的结合使用。它介绍了Spring Boot应用程序利用jOOQ以类型安全的方式与数据库交互的方法。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章