我正在运行springboot服务器。 该服务器有一些web服务。 其中一个服务在收到请求时必须运行外部jar。实际上,服务器是计算引擎(罐子)和用户之间的接口。 有代码:从springboot服务器运行jar应用程序
public class Launcher extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
runJar(this.getJar(), this.getArgs());
}
private void runJar(String jar, String[] args){
try {
String[] s = new String[4+args.length];
s[0] = "nohup";
s[1] = "java";
s[2] = "-jar";
s[3] = jar;
for(int i = 0; i < args.length; i++){
s[i+4] = args[i];
}
Process p = Runtime.getRuntime().exec(s);
//Process exec = Runtime.getRuntime().exec(new String[] {"mkdir", "monTest"});
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("failed");
e.printStackTrace();
}
}
}
public class Memory {
private ArrayList<Integer> startedIds;
public ArrayList<Integer> getStartedIds() {
return startedIds;
}
public void setStartedIds(ArrayList<Integer> startedIds) {
this.startedIds = startedIds;
}
public Memory() {
this.startedIds = new ArrayList<>();
}
public Memory(ArrayList<Integer> arr) {
this.startedIds = arr;
}
public int start() {
int id = this.findAvailableId();
this.getStartedIds().add(id);
System.out.println("i'm going to start with a big command!+uhpop");
String[] args = {"arg1","arg2", "arg3", "&"};
Launcher launcher = new Launcher("myJar.jar", args);
launcher.start();
return id;
}
private int findAvailableId() {
int id = 0;
while(this.getStartedIds().contains(id)){
id++;
}
return id;
}
}
如果我的罐子做的很简单的东西,如创建一个文件,它的作品不错。但如果它更复杂,线程就停止工作,CPU将降至0%。这取决于我所要求的。对于某些任务问题发生之前为他人如做
while(true);
它停了几秒钟后它可以运行30-35seconds。
我认为这就像超时,但实际上它不是一个恒定的时间。也许像内存问题...?我试过在springboot服务器之外运行相同的代码(在启动Memory.start()的简单java项目主体上,它运行良好,所以我认为这是从我身边引起的弹簧启动误解。知道如何使这个瓶子从springboot服务器独立运行只是请告诉我。 谢谢。