1. 概要

このチュートリアルは、 Spring を使用したjOOQの概要の記事のフォローアップであり、SpringBootアプリケーション内でjOOQを使用する方法について説明しています。

そのチュートリアルをまだ読んでいない場合は、それを見て、Mavenの依存関係に関するセクション2およびコード生成に関するセクション3の指示に従ってください。 これにより、 Author Book AuthorBook など、サンプルデータベースのテーブルを表すJavaクラスのソースコードが生成されます。

2. Maven構成

前のチュートリアルのような依存関係とプラグインに加えて、jOOQをSpring Bootで動作させるには、他のいくつかのコンポーネントをMavenPOMファイルに含める必要があります。

2.1. 依存関係の管理

Spring Bootを利用する最も一般的な方法は、[X13X] parent 要素で宣言することにより、spring-boot-starter-parentプロジェクトから継承することです。 ただし、この方法は、従うべき継承チェーンを課すため、常に適切であるとは限りません。これは、多くの場合、ユーザーが望むものではない可能性があります。

このチュートリアルでは、別のアプローチを使用します。依存関係管理をSpringBootに委任します。 これを実現するには、次のdependentencyManagement要素を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のオープンソース配布に焦点を当てていることに注意してください。 商用ディストリビューションを使用したい場合は、公式ブログのSpring BootでjOOQの商用ディストリビューションを使用するためのガイドを確認してください。

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 {
    
}

これは単純で空のままにし、他のすべてのbean宣言を別の構成クラスInitialConfigurationで定義します。

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もSpringBootによって自動的に作成および構成されているため、前のチュートリアルのようにDataSourceTransactionManagerタイプの他のBeanを宣言して利用する必要はありません。 Springトランザクションのサポート。

DSLContext Beanは、前のチュートリアルのPersistenceContextクラスと同じ方法で作成されます。

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

最後に、Configuration実装をDSLContextに提供する必要があります。 Spring Bootは、クラスパスにH2アーティファクトが存在することで、使用中のSQLダイアレクトを認識できるため、ダイアレクトの構成は不要になります。

public DefaultConfiguration configuration() {
    DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
    jooqConfiguration.set(connectionProvider());
    jooqConfiguration
      .set(new DefaultExecuteListenerProvider(exceptionTransformer()));

    return jooqConfiguration;
}

4. jOOQでのSpringBootの使用

jOOQのSpringBootサポートのデモンストレーションをわかりやすくするために、このチュートリアルの前編のテストケースは、クラスレベルの注釈に少し変更を加えて再利用されています。

@SpringApplicationConfiguration(Application.class)
@Transactional("transactionManager")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringBootTest {
    // Other declarations
}

Spring Bootは、 @ContextConfiguration アノテーションを採用するのではなく、@SpringApplicationConfigurationを使用してSpringApplicationContextLoaderコンテキストローダーを利用してアプリケーションをテストすることは明らかです。

データの挿入、更新、削除のテスト方法は、前のチュートリアルとまったく同じです。 詳細については、SpringでのjOOQの使用に関する記事のセクション5を参照してください。 すべてのテストは新しい構成で正常に実行され、jOOQがSpringBootによって完全にサポートされていることを証明する必要があります。

5. 結論

このチュートリアルでは、SpringでのjOOQの使用について深く掘り下げました。 Spring BootアプリケーションがjOOQを利用して、タイプセーフな方法でデータベースと対話する方法を紹介しました。

これらすべての例とコードスニペットの実装は、GitHubプロジェクトにあります。