JBoss CLI 转义 SELECT 1

JBoss CLI escaping SELECT 1

使用JBoss (EAP 6.4) CLI部署,此时想添加数据源。

cli命令是这样的

/profile=XXX/subsystem=datasources/data-source=XXX:add\(connection-url=XXX,url-delimiter="|",jndi-name=java:jboss/datasources/XXX,driver-name=postgresql,user-name=XXX,password=XXX,check-valid-connection-sql="SELECT 1",validate-on-match=true,background-validation=false,share-prepared-statements=false\)

确切的 add 调用如下所示:

/data-source=${DS_NAME}:add(                     \
      connection-url=${DS_CONNECTION_URL},           \
      jndi-name=${DS_JNDI_NAME},                     \
      driver-name=${DS_DRIVER_NAME},                 \
      user-name=${DB_USER},                          \
      password=${DB_USER_PASSWD},                    \
      check-valid-connection-sql=\"SELECT 1\",       \
      validate-on-match=true,                        \
      background-validation=false,                   \
      share-prepared-statements=false)

其实只有这一段有意思

check-valid-connection-sql="SELECT 1"

成功部署后,空格将替换为双撇号。 这是我在 pgsql 日志中得到的:

ERROR: syntax error at or near "1" at character 9
STATEMENT: SELECT''1

JBoss 管理控制台还在配置 -> 数据源 -> 验证> 检查有效 Sql 属性

中显示 SELECT''1

尝试了几种正确的转义方式,但都没有成功。有什么想法吗?

您可以使用 data-source add 命令定义数据源,指定适当的参数值。

域模式:

data-source add --profile=<default | ha | full | full-ha> --name=<Resource ID> --connection-url=<Connection URL> --jndi-name=<JNDI Name> --driver-name=<Driver Name>

独立模式:

data-source add --name=<Resource ID> --connection-url=<Connection URL> --jndi-name=<JNDI Name> --driver-name=<Driver Name>

一个工作示例:

data-source add \
    --name=TEST \
    --check-valid-connection-sql="Select 1" \
    --driver-name=h2 --jndi-name=java:jboss/test \
    --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

获取可用选项列表:

[standalone@localhost:9999 /] data-source add --help

您可以编辑您的独立 (-).xml 或域 (-).xml 以配置数据源:

<subsystem xmlns="urn:jboss:domain:datasources:1.2">
    <datasources>
      <datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS" enabled="true" use-java-context="true">
        <connection-url>jdbc:oracle:thin:@myhostname:1521:oracle</connection-url>
        <driver>oracle</driver>
        <pool>
          <min-pool-size>10</min-pool-size>
          <max-pool-size>20</max-pool-size>
          <prefill>true</prefill>
        </pool>
        <security>
          <user-name>myuser</user-name>
          <password>mypass</password>
        </security>
        <validation>
          <validate-on-match>true</validate-on-match>
          <check-valid-connection-sql>select 1</check-valid-connection-sql>
          <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"></exception-sorter>
        </validation>
      </datasource>
      <drivers>
        <driver name="oracle" module="com.oracle.jdbc">
          <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
        </driver>
      </drivers>
    </datasources>
  </subsystem>

还没来得及分享结果,所以:

JBoss EAP 在 7.1 版之前有一个空格错误。2.Final (EAP) https://issues.jboss.org/browse/AS7-4263