DatabaseParameterProvider

文档中心 › 组件索引 › DatabaseParameterProvider

DatabaseParameterProvider Parameter Provider

类型全限定名:cn.org.acal.lynxus.parameter.DatabaseParameterProvider

所属 Bundle:cn.org.acal.lynxus:lynxus-standard-nar:2.11.8

描述

从数据库表中获取参数

标签

databasedbcpsql

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
数据库类型Generic
  • Database Dialect Service — 需要为 SQL 语句配置 Database Dialect Service
  • Generic — 生成 ANSI SQL
  • Oracle — 生成符合 Oracle 规范的 SQL
  • Oracle 12+ — 生成符合 Oracle 规范的 SQL(12 或更高版本)
  • MS SQL 2012+ — 生成兼容 MS SQL 的 SQL(2012 或更高版本)
  • MS SQL 2008 — 生成兼容 MS SQL 的 SQL(2008 版本)
  • MySQL — 生成兼容 MySQL 的 SQL
  • PostgreSQL — 生成兼容 PostgreSQL 的 SQL
  • Phoenix — 生成符合 Phoenix 规范的 SQL
用于生成特定于服务或供应商的语句的数据库类型。通用类型支持大多数情况,但选择特定类型可以启用优化处理或额外功能。
Database Dialect Service控制器服务 API:
DatabaseDialectService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
数据库方言服务,用于生成特定于特定服务或供应商的语句。
数据库连接池服务控制器服务 API:
DBCPService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
用于获取数据库连接的Controller Service。
参数分组策略grouping-by-column
  • 按列分组 — 单个表通过 'Parameter Group Name Column' 进行分区。此列中具有相同值的所有行将映射到同名组。
  • 按表名分组 — 整个表映射到一个参数组。组名即为表名。
用于对参数进行分组的策略。
表名包含参数的数据库表的名称。
表名包含参数的数据库表名称的逗号分隔列表。
参数名称列包含参数名称的列的名称。
参数值列包含参数值的列的名称。
参数组名称列包含参数应映射到的参数组名称的列的名称。
SQL WHERE 子句可选的 SQL 查询 'WHERE' 子句,用于过滤所有结果。不应包含 'WHERE' 关键字。

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

详细说明

DatabaseParameterProvider

从数据库提供参数

DatabaseParameterProvider 的核心是把数据库行映射为参数,由 Parameter Name Column 和 Parameter Value Column 指定。还需要确定参数组(Parameter Group)的名称,可以通过 Parameter Grouping Strategy 以不同方式指定。

在讨论具体配置之前,请注意:在某些数据库中,'PARAMETER'、'PARAMETERS'、'GROUP' 甚至 'VALUE' 都是保留字。如果所选的列名在你使用的数据库中是保留字,请按照数据库文档对其进行加引号处理。

另外还应注意,表名和列名要使用你的数据库所偏好大小写形式。例如,Postgres 偏好小写的表名和列名, 而 Oracle 偏好首字母大写的形式。选择合适的大小写可以避免在配置 DatabaseParameterProvider 时 出现意外问题。

默认配置采用完全的基于列的方式,参数组名也由同一张表中的列指定。使用这种配置的表示例如下:

PARAMETER_CONTEXTS

PARAMETER_NAME PARAMETER_VALUE PARAMETER_GROUP
param.foo value-foo group_1
param.bar value-bar group_1
param.one value-one group_2
param.two value-two group_2

表 1:Grouping Strategy = Column 时的数据库表示例

要使用该表中的数据,请设置以下属性:

  • Parameter Grouping Strategy - Column
  • Table Name - PARAMETER_CONTEXTS
  • Parameter Name Column - PARAMETER_NAME
  • Parameter Value Column - PARAMETER_VALUE
  • Parameter Group Name Column - PARAMETER_GROUP

获取完成后,本示例中的参数如下:

参数组 group_1:

  • param.foo - value-foo
  • param.bar - value-bar

参数组 group_2:

  • param.one - value-one
  • param.two - value-two

分组策略(Grouping Strategy)

默认的分组策略是按列(Column),它允许在 Parameter Group Column 中显式指定参数组名。注意, 如果该列的值为 NULL,会抛出异常。

另一种分组策略是按表(Table),它把每张表映射为一个参数组,并将参数组名设为表名。使用这种 分组策略时不会用到 Parameter Group Column。使用此策略的配置示例如下:

  • Parameter Grouping Strategy - Table
  • Table Names - KAFKA, S3
  • Parameter Name Column - PARAMETER_NAME
  • Parameter Value Column - PARAMETER_VALUE

可以配合该策略使用的表示例:

KAFKA

PARAMETER_NAME PARAMETER_VALUE
brokers http://localhost:9092
topic my-topic
password my-password

表 2:Grouping Strategy = Table 时的 'KAFKA' 数据库表示例

S3

PARAMETER_NAME PARAMETER_VALUE
bucket my-bucket
secret.access.key my-key

表 3:Grouping Strategy = Table 时的 'S3' 数据库表示例

获取完成后,本示例中的参数如下:

参数组 KAFKA:

  • brokers - http://localhost:9092
  • topic - my-topic
  • password - my-password

参数组 S3:

  • bucket - my-bucket
  • secret.access.key - my-key

过滤行

如果只需要把表中的部分行作为参数引入,可以使用 'SQL WHERE clause' 属性。示例如下:

  • Parameter Grouping Strategy - Table
  • Table Names - KAFKA, S3
  • Parameter Name Column - PARAMETER_NAME
  • Parameter Value Column - PARAMETER_VALUE
  • SQL WHERE clause - OTHER_COLUMN = 'my-parameters'

这里假设 KAFKA 和 S3 两张表中都有另一个列 'OTHER_COLUMN'。那么只有 'OTHER_COLUMN' 值为 'my-parameters' 的行才会从这些表中被获取。