Quarkus サポート

概要

Domaは Quarkus v3.7.0以降をサポートしています。DomaとQuarkusを統合するには、 quarkus-doma エクステンションを使用する必要があります。

注釈

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

インストール

Gradle

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

Maven

<!-- ... -->
<properties>
    <doma.version>3.14.0</doma.version>
    <quarkus-doma.version>1.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>
                <compilerArgs>
                    <!-- if you are using a Maven project in Eclipse, this argument is required -->
                    <arg>-Adoma.resources.dir=${project.basedir}/src/main/resources</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

主な特徴

ホットリロード

開発モードでは、quarkus-domaエクステンションは、変更時にSQLとスクリプトファイルを自動検出してリロードします。

自動Bean登録

quarkus-domaエクステンションは、すべてのDAO BeanをQuarkus CDIコンテナに自動的に登録します。

起動時のSQL自動実行

quarkus-domaエクステンションは、アプリケーション起動時に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 inventoryConfig;

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

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

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

The quarkus-doma extension automatically recognizes reflective classes and resources. These are included in your native image without requiring any additional configuration.

サンプルプロジェクト

domaframework/quarkus-sample