在Oracle数据库的WildFly属性文件中转义一个空格



我很难使用WildFly(24)在Linux中使用Oracle 19在RDS中读取的属性文件中具有空间的环境变量。一个像:

SELECT 1 FROM DUAL

问题是,wildfly甚至不会解析文件,如果空格在那里与正常的引用方法。

我有它的设置,使变量是在一个文件称为数据源。从该变量所在的standalone.conf中读取的属性:

JAVA_OPTS="$JAVA_OPTS -DDATABASE_CONNECTION_CHECK=${DATABASE_CONNECTION_CHECK}"

在standalone.conf中读取:

set -a
. /opt/wildfly_config/datasource.properties
set +a

然后在standalone.xml中填充:

<connection-url>${env.DATABASE_JDBC_URL}</connection-url>

我试着把它放在引号里,奇怪的是它根本没有开始。Standalone.sh不再能够解析它:

Error: Could not find or load main class 1 Caused by: java.lang.ClassNotFoundException: 1

我已经尝试了很多事情,如:


DATABASE_CONNECTION_CHECK="SELECT{ }1{ }FROM{ }DUAL"
DATABASE_CONNECTION_CHECK="'SELECT 1 FROM DUAL'"
DATABASE_CONNECTION_CHECK='SELECT 1 FROM DUAL'
DATABASE_CONNECTION_CHECK="SELECT+1+FROM+DUAL"
DATABASE_CONNECTION_CHECK="SELECT 1 FROM DUAL"
DATABASE_CONNECTION_CHECK=""SELECT 1 FROM DUAL""
DATABASE_CONNECTION_CHECK=""'SELECT 1 FROM DUAL'""
DATABASE_CONNECTION_CHECK="SELECT%201%20FROM%20DUAL"
DATABASE_CONNECTION_CHECK="SELECT{ }1{ }FROM{ }DUAL"
DATABASE_CONNECTION_CHECK='SELECT{ }1{ }FROM{ }DUAL'
DATABASE_CONNECTION_CHECK="'SELECT{ }1{ }FROM{ }DUAL'"
DATABASE_CONNECTION_CHECK="''SELECT{ }1{ }FROM{ }DUAL''"
DATABASE_CONNECTION_CHECK="SELECT%1%FROM%DUAL"

(我意识到其中一些没有意义,但我在寻找不同的东西。)启动在日志输出中看起来很好,但是java不喜欢它,由于某种原因,它看到了转义的使用:

Caused by: Error : 936, Position : 9, Sql = SELECT+1+FROM+DUAL, OriginalSql = SELECT+1+FROM+DUAL, Error Msg = ORA-00936: missing expression

Caused by: Error : 911, Position : 6, Sql = SELECT%1%FROM%DUAL, OriginalSql = SELECT%1%FROM%DUAL, Error Msg = ORA-00911: invalid character

WARN [org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory] (ServerService Thread Pool -- 46) IJ030027: Destroying connection that is not valid, due to the following exception: oracle.jdbc.driver.T4CConnection@2c1456f8: java.sql.SQLException: Non supported SQL92 token at position: 7

最后一个是唯一一个真正有不同的地方。我用:DATABASE_CONNECTION_CHECK="SELECT{}1{}FROM{}DUAL"

我可以使用sed来更改standalone.xml中的值,但是除了这个属性之外,我所做的所有其他属性都可以正常工作。我在使用MSSQL的jdbc字符串中使用分号并将分号放在"{;}"之类的大括号中时遇到了困难。固定。这个数据库显然没有遵循相同的语法。

是否有一种编码类型,将有助于这与Oracle和保持wildfly快乐?

编辑:更多测试:

DATABASE_CONNECTION_CHECK="SELECT' '1' 'FROM' 'DUAL"

得到

Caused by: Error : 900, Position : 0, Sql = "SELECT 1 FROM DUAL", OriginalSql = "SELECT 1 FROM DUAL", Error Msg = ORA-00900: invalid SQL statement'

(似乎不像引号)

但是没有转义的引号,我得到:

Caused by: Error : 923, Position : 9, Sql = SELECT' '1' 'FROM' 'DUAL, OriginalSql = SELECT' '1' 'FROM' 'DUAL, Error Msg = ORA-00923: FROM keyword not found where expected

一个更好的解决方案是将文件的来源从:

set +a
. /opt/PrimeKey/wildfly_config/datasource.properties
set -a

. /opt/PrimeKey/wildfly_config/datasource.properties

并确保所有引入的变量都是变量而不是属性:

export DATABASE_CONNECTION_CHECK="SELECT 1 FROM DUAL"

相关内容

最新更新