Quarkus サポート

概要

Domaは Quarkus v3.7.0以降をサポートしています。DomaとQuarkusを組み合わせるには、 quarkus-doma モジュールが必要です。

注釈

Quarkusとquarkus-domaモジュールにはJava 17以降が必要です。

インストール

Gradle

dependencies {
    annotationProcessor("org.seasar.doma:doma-processor:2.58.0")
    implementation("org.seasar.doma:doma-core:2.58.0")
    implementation("io.quarkiverse.doma:quarkus-doma:0.0.9")
}

Maven

...
<properties>
    <doma.version>2.58.0</doma.version>
    <quarkus-doma.version>0.0.9</quarkus-doma.version>
    <compiler-plugin.version>3.9.0</compiler-plugin.version>
</properties>
...
<dependencies>
    <dependency>
        <groupId>org.seasar.doma</groupId>
        <artifactId>doma-core</artifactId>
        <version>${doma.version}</version>
    </dependency>
    <dependency>
        <groupId>io.quarkiverse.doma</groupId>
        <artifactId>quarkus-doma</artifactId>
        <version>${quarkus-doma.version}</version>
    </dependency>
</dependencies>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${compiler-plugin.version}</version>
            <configuration>
                <source>17</source>
                <target>17</target>
                <!-- the parameters=true option is critical so that RESTEasy works fine -->
                <parameters>true</parameters>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.seasar.doma</groupId>
                        <artifactId>doma-processor</artifactId>
                        <version>${doma.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

主な特徴

ホットリロード

開発モードでは、quarkus-domaモジュールは、変更時にSQLとスクリプトファイルをリロードします。

自動Bean登録

quarkus-domaモジュールは、すべてのDAO BeanをQuarkus CDIコンテナに登録します。

起動時のSQL自動実行

quarkus-domaモジュールは、Quarkusの起動時にimport.sqlを実行します。

設定

application.propertiesファイルに次の構成を記述できます。

quarkus.doma.sql-file-repository=greedy-cache
quarkus.doma.naming=none
quarkus.doma.exception-sql-log-type=none
quarkus.doma.dialect=h2
quarkus.doma.batch-size=10
quarkus.doma.fetch-size=50
quarkus.doma.max-rows=500
quarkus.doma.query-timeout=5000
quarkus.doma.sql-load-script=import.sql

上記のプロパティはすべてオプションです。

詳細は Configuration Reference を参照してください。

複数のデータソース

Domaの設定を各データソースに次のようにバインドできます。

# default datasource
quarkus.datasource.db-kind=h2
quarkus.datasource.username=username-default
quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:default
quarkus.datasource.jdbc.min-size=3
quarkus.datasource.jdbc.max-size=13

# inventory datasource
quarkus.datasource.inventory.db-kind=h2
quarkus.datasource.inventory.username=username2
quarkus.datasource.inventory.jdbc.url=jdbc:h2:tcp://localhost/mem:inventory
quarkus.datasource.inventory.jdbc.min-size=2
quarkus.datasource.inventory.jdbc.max-size=12

# Doma's configuration bound to the above default datasource
quarkus.doma.dialect=h2
quarkus.doma.batch-size=10
quarkus.doma.fetch-size=50
quarkus.doma.max-rows=500
quarkus.doma.query-timeout=5000
quarkus.doma.sql-load-script=import.sql

# Doma's configuration bound to the above inventory datasource
quarkus.doma.inventory.dialect=h2
quarkus.doma.inventory.batch-size=10
quarkus.doma.inventory.fetch-size=50
quarkus.doma.inventory.max-rows=500
quarkus.doma.inventory.query-timeout=5000
quarkus.doma.inventory.sql-load-script=import.sql

io.quarkus.agroal.DataSource 修飾子を使用して、名前付きのDomaのリソースを注入できます。

@Inject
Config defaultConfig;

@Inject
Entityql defaultEntityql;

@Inject
NativeSql defaultNativeSql;

@Inject
@DataSource("inventory")
Config invetoryConfig;

@Inject
@DataSource("inventory")
Entityql inventoryEntityql;

@Inject
@DataSource("inventory")
NativeSql inventoryNativeSql;

ネイティブイメージのサポート

quarkus-domaモジュールは、リフレクションクラスとリソースを認識し、追加の設定なしでネイティブイメージに含めます。

サンプルプロジェクト

domaframework/quarkus-sample