我使用Java DSL进行了一个非常简单的 Camel ssh路由设置,仅设置了一个pollCommand:date +%s%3N
,它应该输出当前时间戳。但是结果是空的。但是,如果命令只是date
,则它可以按预期工作。我很确定问题出在+
或%
字符中,但URL编码无济于事:
date%20%2B%25s%253N
date %2B%25s%253N
date +%25s%253N
date %2B%s%3N
从上面没有任何工作。
以下是我正在使用的代码段:
public static void main(String[] args) throws Exception {
DefaultCamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new RouteBuilder(){
@Override
public void configure() throws Exception {
from("ssh://root:pswrd@192.168.12.12:22?delay=1000&pollCommand=date +s3N%0A")
.convertBodyTo(String.class, "UTF-8")
.log(LoggingLevel.INFO, "${body}");
}
});
camelContext.start();
}
Camel的版本是 2.19.2 。
那么如何从命令的参数部分(
+%s%3N
)编码/转义特殊字符? 最佳答案
除了@Claus Ibsen的以外,找到了另一种解决方案
date RAW(+%s%3N)
我以为问题出在
+
标志中。所以我只需要在pollCommand
中不要使用它,可以通过以下命令来完成:date $(printf "\x2b")%s%3N