0
我想在春季啓動應用程序使用Java ExecutorService
。應用程序的 多個模塊被稱爲@Scheduled
。 此模塊調用過程從使用Runtime.exec
外部應用程序獲得的結果。該方法應該得到這是由java的的ExecutorService爲的Runtime.exec春季引導正確的方式
此方法處理可以稱爲一個請求和響應,其可以被稱爲24/7的調度的線程的一部分以及部分結果。該方法的多個實例可以一次運行。
它是最佳使用被定義爲這樣一個或局部變量一些其它方法ExecutorService
建議。 要求是Java不應該無限等待得到結果。它應該超時。 這裏是叫
public String getExternalInformation(String applicationPath, String command, int noOfTries)
{
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future;
boolean taskExecuted=false;
int trialNumber=0;
String response = "";
while((!taskExecuted)&&(trialNumber<noOfTries))
{
trialNumber++;
log.info("Starting Trial: "+trialNumber);
future= executor.submit(new TestProcessTask(applicationPath,command));
try {
System.out.println("Started Information Fetching ");
response=future.get(3, TimeUnit.MINUTES);
taskExecuted =true;
} catch (TimeoutException e) {
future.cancel(true);
System.out.println("Timed out!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
executor.shutdownNow();
return response;
}
的TestProcessTask的call()
方法將調用Runtime.exec
和解析返回OutputStream
的方法。
我可能會使用配置'TaskExecutor',而不是(從創建和管理爲您節省了春天'ExecutorService',你有一個你可以配置的共享實例)。也有一些重試邏輯在裏面,你可能想看看重試行爲春重試項目爲(由Spring Batch的和Spring集成使用)。 –
已經使用TaskExecutor運行@Scheduled作業。這是預定的工作,然後調用這個方法來運行一個進程。 – javaEd
上述方法是否會導致內存開銷或資源中的任何問題?由於它是一個局部變量,我認爲它是安全的。我正在做這個作爲應用程序的快速修復。如果它可能導致任何問題,我想確定它。 – javaEd