jOOQのSpring Bootサポート

jOOQのSpring Bootサポート

1. 概要

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

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

2. Mavenの構成

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

2.1. 依存関係管理

Spring Bootを利用する最も一般的な方法は、parent要素で宣言することにより、spring-boot-starter-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. スプリングブート構成

3.1. 初期ブート設定

jOOQサポートに入る前に、SpringBootで準備を始めます。

まず、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も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でのSpringBootの使用

jOOQのSpring Bootサポートのデモを簡単に理解できるようにするため、このチュートリアルの前編のテストケースは、クラスレベルのアノテーションを少し変更して再利用されています。

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

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

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

5. 結論

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

これらすべての例とコードスニペットの実装は、a GitHub projectにあります。