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プロジェクト]にあります。