jOOQのSpring Bootサポート

1概要

このチュートリアルはリンクへのフォローアップです:/jooq-with-spring[SpringとjOOQの紹介]記事では、jOOQをSpring Bootアプリケーション内で使用する方法を説明します。

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

2 Mavenの設定

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

2.1. 依存関係管理

Spring Bootを利用する最も一般的な方法は、 parent 要素で宣言することによって spring-boot-starter-parent プロジェクトから継承することです。ただし、この方法は継承チェーンをたどることになるため、必ずしも適しているわけではありません。これは、多くの場合、ユーザーが望んでいることとは異なる場合があります。

このチュートリアルでは別の方法を使用します。依存関係管理をSpring Bootに委任します。これを実現するには、POMファイルに次の dependencyManagement 要素を追加するだけです。

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

2.3. 依存関係

Spring BootがjOOQを制御するには、 spring-boot-starter-jooq アーティファクトへの依存関係を宣言する必要があります。

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

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=

簡単なBootアプリケーションも定義します。

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

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 でSpring Bootを使う

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

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

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

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

5結論

このチュートリアルでは、SpringでのjOOQの使用についてさらに詳しく説明しました。 Spring BootアプリケーションがjOOQを利用してデータベースとタイプセーフな方法でやり取りする方法を紹介しました。

これらすべての例とコードスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/spring-jooq[GitHubプロジェクト]にあります。