我想用 javaagent 運行 tomcat。
設定環境.sh:
export JAVA_HOME=/home/ggfan/1-install/java/jdk1.8.0_271
export CATALINA_OPTS="${CATALINA_OPTS} -javaagent:/home/ggfan/2-work/centuari-space/jdbc-leak-detector/target/jdbcld.jar=/home/ggfan/3-tmp/logs/jdbcld,INFO,org.apache.commons.dbcp.PoolingDataSource\$PoolGuardConnectionWrapper"
呼叫startup.sh,似乎tomcat正確選擇了它:
[ggfan@localhost bin]$ ./startup.sh
Using CATALINA_BASE: /home/ggfan/1-install/apache-tomcat-8.5.64
Using CATALINA_HOME: /home/ggfan/1-install/apache-tomcat-8.5.64
Using CATALINA_TMPDIR: /home/ggfan/1-install/apache-tomcat-8.5.64/temp
Using JRE_HOME: /home/ggfan/1-install/java/jdk1.8.0_271
Using CLASSPATH: /home/ggfan/1-install/apache-tomcat-8.5.64/bin/bootstrap.jar:/home/ggfan/1-install/apache-tomcat-8.5.64/bin/tomcat-juli.jar
Using CATALINA_OPTS: -javaagent:/home/ggfan/2-work/centuari-space/jdbc-leak-detector/target/jdbcld.jar=/home/ggfan/3-tmp/logs/jdbcld,INFO,org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
Tomcat started.
但是,從 tomcat 日志:
24-Sep-2021 15:45:04.437 資訊 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令列引數: -javaagent:/home/ggfan/2-work/centuari-space/jdbc-leak-detector/target/jdbcld.jar=/home/ggfan/3-tmp/logs/jdbcld,INFO,org.apache.commons.dbcp.PoolingDataSource
'$' 符號后的內部類名丟失了,我的 javaagent 收到的真正引數是不完整的。
怎么了?
我在 fedora 31 上運行 tomcat Apache Tomcat/8.5.64
uj5u.com熱心網友回復:
為了拆分CATALINA_OPTS成單詞并將它們作為引數傳遞給java,catalina.sh腳本使用eval:
eval exec "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
...
這顯然對 執行變數擴展$PoolGuardConnectionWrapper。為了防止這種情況兩次轉義美元符號:
export CATALINA_OPTS="${CATALINA_OPTS} ...PoolingDataSource\\\$PoolGuardConnectionWrapper"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316748.html
上一篇:Tomcat:403服務器理解請求但在keycloak登錄后拒絕授權錯誤
下一篇:構建無限串列的排序無限串列
