在Quarkus中使用jOOQ - SQLDialect需要手动定义

问题描述 投票:0回答:1

当将 jOOQ 与 Quarkus 框架一起使用时,我需要手动选择 SQL 方言,因为它不是从典型的

application.conf
设置中拾取/解析的。例如:
quarkus.datasource.db-kind=mariadb
表示 mariadb。

我可以通过在

application.conf
中定义附加属性并手动解决它来手动解决它。

参见以下示例:

...
final Optional<@NotNull SQLDialect> maybeSqlDialect =
        Arrays.stream(SQLDialect.families()).filter(x -> x.name().equalsIgnoreCase(jooqDialect)).findFirst();
if (maybeSqlDialect.isEmpty()) {
    throw new RuntimeException("sql-dialect not found! " + jooqDialect);
}
final SQLDialect sqlDialect = maybeSqlDialect.get();

Configuration configuration = new DefaultConfiguration()
        .set(dataSource)
        .set(sqlDialect)
        .set(new Settings()
          ...
        );
...

是否可以让 jOOQ 自动从

javax.sql.Datasource
解析 SQLDialect,或者是否有其他我可能不知道的替代方案,以使 jOOQ 为我在 application.conf 文件中设置的 quarkus 数据源配置正确选择 SQLDialect ?

使用过的版本:

  • 夸库斯3.8.2
  • jOOQ 3.19.6
quarkus jooq
1个回答
0
投票

jOOQ 本身不会单独从

SQLDialect
解析
javax.sql.DataSource
,因为要做到这一点,它必须调用
DataSource.getConnection()
,这可能是一个代价高昂的操作。在获取
SQLDialect
之前,
Connection
已经是必需的,并且并非所有与 jOOQ 的交互都需要
Connection
。例如。当记录格式化 SQL 时,生成的 SQL 只需要
SQLDialect
,而不是
Connection
,因为它不会被执行。

如果您可以为 jOOQ 提供 JDBC

Connection
,那么它可以从元数据中找到
SQLDialect
,但是:

// This dialect is inferred:
DSL.using(connection).configuration().dialect();

或者,如果您知道您的

DataSource
是如何设置的(例如,从属性文件),那么您也可以使用
JDBCUtils.dialect(String)
让 jOOQ 查看 JDBC URL 以至少派生
SQLDialect
系列。这种方式也无法检测方言版本,为此,还需要 JDBC
Connection
(及其
DatabaseMetaData
API)

© www.soinside.com 2019 - 2024. All rights reserved.