Java 进行外部进程调用时的设计优化
我需要从java进程调用外部进程/脚本/cli命令。Java 进行外部进程调用时的设计优化,java,linux,oop,design-patterns,processbuilder,Java,Linux,Oop,Design Patterns,Processbuilder,我需要从java进程调用外部进程/脚本/cli命令。 由于这些调用将非常多,一些调用将返回运行的进程/脚本的结果,而其他调用将只运行它,因此我想知道: 有一种标准设计可以围绕Java的ProcessBuilder 这样我就不会分散在对ProcessBuilder 不断地 我可以做什么优化?例如,阅读有意义吗 从文件中删除所有cli命令,而不是保留它们,例如 代码中的最后一个字符串 你的问题有点含糊不清,无法写出准确的答案,但我有一些建议: Shell用于链接命令(管道、等待等)并编写一点逻辑代
由于这些调用将非常多,一些调用将返回运行的进程/脚本的结果,而其他调用将只运行它,因此我想知道:
ProcessBuilder
这样我就不会分散在对ProcessBuilder
不断地你的问题有点含糊不清,无法写出准确的答案,但我有一些建议:
- Shell用于链接命令(管道、等待等)并编写一点逻辑代码。shell是解释的,很容易更新,但必须保持简单。它们可能是您系统的基本部分
- 编写自己的
方法来启动进程并捕获stdout和stderr(在两个线程中),以编写驱动程序的日志launch
- 设计XML文件以声明方式指定:
- 进程路径及其参数(静态参数)
- 作业间的并行性和同步性
- 用Java编写一个模型以反映XML流程模型(JAXB可能是一个解决方案)
- 向模型中添加等待一组作业的功能
- 向模型添加修饰符以动态更改参数的值
我可以建议你不用编程就用ANT来解决你的问题吗
用纸和笔画一幅希望执行的图画可能会有帮助…;-)
一些图形应用程序可能有助于绘制控制流的逻辑图。完成后,在这里发布,您将获得更准确的答案,我希望…请发布一些commands@Aubin:示例包括:通过
/etc/init.d
重新启动其他进程,执行ifconfig
,请使用remote shell来命名最重要的+1。这很有趣,但有些部分我不懂。当您提到作业时,您的意思是什么?以及模型是什么?我的意思是您建议从XML配置文件(甚至可能是属性文件)读取,对吗?谢谢。是的,作业是{进程+元信息,如其状态、逻辑名称等}。模型不仅仅是“配置文件”,因为它是逻辑规范,您的程序将是该规范的解释器。XML比属性文件更结构化。关于作业之间的并行性和同步,您是什么意思?我怎样才能捕捉到这一点呢?我还不确定XML文件中如何指定并行性。虽然我没有这么重的要求,但你指出了我没有考虑到的事情。
<parallel>
<wlrun ... >
<sequential>
<sleep seconds="30"/>
<junit fork="true" forkmode="once" ... >
<wlstop/>
</sequential>
</parallel>