Linux下WildFly 24连接Oracle 19 RDS时properties文件空格转义问题
Linux下WildFly 24连接Oracle 19 RDS时含空格环境变量的处理问题
问题场景
在Linux环境中使用WildFly 24连接RDS上的Oracle 19数据库时,遇到properties文件中含空格的环境变量处理难题。例如SQL语句SELECT 1 FROM DUAL,常规引号转义方式会导致WildFly无法解析配置文件。
当前配置方式
- 将变量存入
datasource.properties文件 - 在
standalone.conf中通过以下代码加载配置:
set -a . /opt/wildfly_config/datasource.properties set +a
- 在
standalone.conf中设置JVM参数:
JAVA_OPTS="$JAVA_OPTS -DDATABASE_CONNECTION_CHECK=${DATABASE_CONNECTION_CHECK}"
- 最终在
standalone.xml中通过<connection-url>${env.DATABASE_JDBC_URL}</connection-url>引用变量
尝试过的转义写法及问题
尝试了多种转义写法,但均存在问题:
- 添加引号会直接导致WildFly启动失败,报错:
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" - 部分写法能让WildFly正常启动,但执行SQL时Oracle报错,如
ORA-00936: missing expression、ORA-00911: invalid character等 - 使用
DATABASE_CONNECTION_CHECK="SELECT{}1{}FROM{}DUAL"时,会出现Non supported SQL92 token警告 - 此前处理MSSQL JDBC字符串分号时,用
{;}可解决问题,但该方式不适用于Oracle
补充测试结果
- 写法
DATABASE_CONNECTION_CHECK=\"SELECT' '1' 'FROM' 'DUAL\"会导致Oracle报错:ORA-00900: invalid SQL statement - 去掉引号转义后,Oracle报错:
ORA-00923: FROM keyword not found where expected
需求
可以通过sed修改standalone.xml解决,但希望找到适配Oracle且能让WildFly正常解析的编码或转义方式,避免修改配置文件本身。
内容的提问来源于stack exchange,提问作者Alex G.
相关产品推荐
相关产品推荐

