我需要從java進程調用外部進程/腳本/ cli命令。
由於這些電話將是相當多的,有的將返回過程/腳本,運行和其他人將只運行它的結果,我在想,如果:進行外部進程調用時的設計優化
- 有一個標準設計圍繞打造Java的
ProcessBuilder
這樣我就沒有分散的代碼調用ProcessBuilder
不斷 - 我可以做什麼優化?例如,從文件中讀取所有cli命令而不是保留它們例如 是有意義的。作爲
final String
的代碼?
我需要從java進程調用外部進程/腳本/ cli命令。
由於這些電話將是相當多的,有的將返回過程/腳本,運行和其他人將只運行它的結果,我在想,如果:進行外部進程調用時的設計優化
ProcessBuilder
這樣我就沒有分散的代碼調用ProcessBuilder
不斷final String
的代碼?你的問題是模糊寫一個確切的答案一點點,但我有一些建議:
launch
方法來啓動一個進程並捕獲stdout和stderr(在兩個線程中)來寫驅動程序的日誌。如果我嘗試分類你的問題,我認爲主要在控制流程。
要解決一個很大的問題,你可以使用並行:同時啓動多個進程,等待它們全部終止:這是一個相約或加入階段。也許你可以啓動遠程命令到另一臺聯網的計算機。
一個很好的例子,如何指定並行成一個XML文件是ANT build files:
<parallel>
<wlrun ... >
<sequential>
<sleep seconds="30"/>
<junit fork="true" forkmode="once" ... >
<wlstop/>
</sequential>
</parallel>
我可以建議你使用ANT無需編程來解決問題了嗎?
希望執行的繪圖可能幫助,用紙和筆... ;-)
幾個圖形應用程序可以幫助繪製控制流的邏輯圖。完成後,在這裏發佈,你會得到更準確的答案,我希望...
+ 1.這很有趣,但是有些部分我不遵循。當你提到作業時,你是什麼意思?'model'是什麼意思?我的意思是你只是建議從XML配置文件讀取(甚至可能是一個屬性文件)是正確的? – Cratylus 2013-03-06 21:28:53
謝謝。是的,作業是{Process +元信息,如其狀態,邏輯名稱等}。模型不僅僅是'配置文件',因爲它是邏輯規範,你的程序將是本規範的解釋器。 XML比屬性文件更結構化。 – Aubin 2013-03-06 21:32:05
另外你對「作業」之間的並行性和同步性有什麼意義?我如何捕捉? – Cratylus 2013-03-06 21:36:04
請發佈一些命令示例 – Aubin 2013-03-06 21:05:56
@Aubin:例子是:通過'/etc/init.d',do'ifconfig'重啓其他進程,做遠程shell命名最重要的 – Cratylus 2013-03-06 21:17:04