首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Oracle转义WildFly属性文件中的空格

用Oracle转义WildFly属性文件中的空格
EN

Stack Overflow用户
提问于 2022-11-22 22:45:46
回答 1查看 33关注 0票数 1

我很难使用一个环境变量,在WildFly (24)中使用RDS中的Oracle19读取属性文件中的一个空格。其中之一是:

SELECT 1 FROM DUAL

问题是,如果空格与普通的引用方法在一起,通配符甚至不会解析文件。

我已经设置了该变量,因此该变量位于一个名为datasource.properties的文件中,该文件将从standalone.conf读取该变量所在的位置:

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

它与standalone.conf中的以下内容一起阅读:

代码语言:javascript
复制
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

我尝试过很多事情,例如:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 20:14:21

更好的解决办法是将文件来源改为:

代码语言:javascript
复制
set +a
. /opt/PrimeKey/wildfly_config/datasource.properties
set -a

代码语言:javascript
复制
. /opt/PrimeKey/wildfly_config/datasource.properties

所以所有引入的变量都是变量而不是属性:

代码语言:javascript
复制
export DATABASE_CONNECTION_CHECK="SELECT 1 FROM DUAL"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74539839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档