我很难使用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"