1. 概述

本教程是《使用Spring与jOOQ入门》文章的后续内容,主要讲解在Spring Boot应用中使用jOOQ的方法。

如果你还没有阅读过那篇文章,请先浏览一下,并按照第2节的Maven依赖和第3节的代码生成部分进行操作。这将为你生成代表样例数据库表的Java类源代码,包括AuthorBookAuthorBook

2. Maven配置

除了上一教程中的依赖和插件之外,为了使jOOQ与Spring Boot协同工作,还需要在Maven pom.xml文件中添加其他组件。

2.1. 依赖管理

最常用的使用Spring Boot的方式是从spring-boot-starter-parent项目继承,通过parent元素声明。然而,这种方法并不总是适用,因为它会引入一个需要遵循的继承链,而在很多情况下,用户可能并不希望这样。

本教程采用另一种方法:将依赖管理委托给Spring Boot。要做到这一点,只需在pom.xml文件中添加以下dependencyManagement元素:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>3.2.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2. 依赖

为了让Spring Boot控制jOOQ,需要声明对spring-boot-starter-jooq artefact的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jooq</artifactId>
    <version>3.2.2</version>
</dependency>

请注意,本文专注于jOOQ的开源版本。如果你想使用商业发行版,可以查看官方博客上的如何在Spring Boot中使用jOOQ的商业发行版

3. Spring Boot配置

3.1. 初始启动配置

在深入到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));
}

由于Spring Boot已经自动创建并配置了名为transactionManager的bean,因此我们不需要像上一教程那样声明DataSourceTransactionManager类型的其他bean以利用Spring事务支持。

同样地,我们以与前一教程中的PersistenceContext类相同的方式创建DSLContext bean:

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

最后,需要提供一个Configuration实现给DSLContext。由于Spring Boot能够通过类路径上存在的H2 artefact识别使用的SQL方言,所以不再需要dialect配置:

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. 总结

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

这些示例和代码片段的实现可以在GitHub项目中找到。


« 上一篇: Gatling介绍
» 下一篇: Java 中使用XPath