我很难使用一个环境变量,在WildFly (24)中使用RDS中的Oracle19读取属性文件中的一个空格。其中之一是:
SELECT 1 FROM DUAL
问题是,如果空格与普通的引用方法在一起,通配符甚至不会解析文件。
我已经设置了该变量,因此该变量位于一个名为datasource.properties的文件中,该文件将从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字符串中使用分号,并将分号放在大括号中,比如"{;}“。这个DB显然不遵循相同的语法。
是否有一种编码类型将有助于Oracle并使通配符保持愉快?
编辑:更多测试:
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
发布于 2022-11-23 20:14:21
更好的解决办法是将文件来源改为:
set +a
. /opt/PrimeKey/wildfly_config/datasource.properties
set -a至
. /opt/PrimeKey/wildfly_config/datasource.properties所以所有引入的变量都是变量而不是属性:
export DATABASE_CONNECTION_CHECK="SELECT 1 FROM DUAL"https://stackoverflow.com/questions/74539839
复制相似问题