===============
Quarkus support
===============
.. contents::
:depth: 4
Overview
========
Doma supports `Quarkus `_ v3.7.0 and later.
To integrate Doma with Quarkus, you need to use the `quarkus-doma `_ extension.
.. note::
Quarkus and the quarkus-doma module require Java 17 and later.
Installing
==========
Gradle
------
.. code-block:: kotlin
dependencies {
annotationProcessor("org.seasar.doma:doma-processor:{{ doma_version }}")
implementation("org.seasar.doma:doma-core:{{ doma_version }}")
implementation("io.quarkiverse.doma:quarkus-doma:{{ quarkus_doma_version }}")
}
Maven
-----
.. code-block:: xml
...
{{ doma_version }}{{ quarkus_doma_version }}3.9.0
...
org.seasar.domadoma-core${doma.version}io.quarkiverse.domaquarkus-doma${quarkus-doma.version}
...
org.apache.maven.pluginsmaven-compiler-plugin${compiler-plugin.version}1717trueorg.seasar.domadoma-processor${doma.version}-Adoma.resources.dir=${project.basedir}/src/main/resources
Main features
=============
Hot reloading
-------------
In development mode, the quarkus-doma extension automatically detects and reloads SQL and Script files whenever you modify them.
Automatic bean register
-----------------------
The quarkus-doma extension automatically registers all DAO beans in the Quarkus CDI container.
Automatic SQL execution on startup
-----------------------------------
The quarkus-doma extension automatically executes the import.sql script file during application startup to initialize your database.
Configuration
-------------
You can write the following configurations in your application.properties file:
.. code-block:: 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
The above properties are all optional.
Please refer to the `Configuration References `_ for details.
Multiple Datasources
--------------------
You can bind Doma’s configurations to each datasource as follows:
.. code-block:: properties
# 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
You can inject the named Doma’s resource using the ``io.quarkus.agroal.DataSource`` qualifier as follows:
.. code-block:: java
@Inject
Config defaultConfig;
@Inject
Entityql defaultEntityql;
@Inject
NativeSql defaultNativeSql;
@Inject
@DataSource("inventory")
Config inventoryConfig;
@Inject
@DataSource("inventory")
Entityql inventoryEntityql;
@Inject
@DataSource("inventory")
NativeSql inventoryNativeSql;
Support for native images
-------------------------
The quarkus-doma extension automatically recognizes reflective classes and resources. These are included in your native image without requiring any additional configuration.
Sample project
==============
`domaframework/quarkus-sample `_