如何从 NodeJs 调用 Java 程序

2022-09-03 14:37:41

我有一个Java程序,我通常从命令行启动。从命令行启动后,Java 程序将永久保持运行,直到按住 Ctrl+C 退出它或终止另一个脚本中的命令。Java 程序将错误消息(如果有)输出到控制台。

现在我想开发基于Express的NodeJs Web应用程序。当用户单击链接(运行)时,单击处理程序将调用Ajax请求,这将导致后端NodeJs脚本运行此Java程序(如果它尚未运行)。另一个链接(Stop)将发出Ajax请求以停止此Java程序。

如何实现这一点?使用示例代码回答将非常有用。

还有一个要求:如果这个NodeJs Web应用程序被终止,由它启动的Java程序将继续运行,即它不依赖于NodeJs的Web应用程序。


答案 1

您可以启动子进程,并在不需要时发送终止信号。

var spawn = require('child_process').spawn;
var child = spawn('java', ['params1', 'param2']);

要终止应用程序或模拟 +,请发送信号:CTRLC

// control + c is an interrupt signal
child.kill('SIGINT');

// or send from the main process
process.kill(child.pid, 'SIGINT');

如果要分离运行应用程序,则可能应该在某个位置写入 PID。要运行分离的应用程序,请按如下方式运行它:

var fs = require('fs');
var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');

var child = spawn('java', [], {
  detached: true,
  stdio: [ 'ignore', out, err ]
});
child.unref();

这将生成一个子进程,其 I/O 流未与父进程关联。


答案 2

你可以简单地调用一个java命令,使用classpath和参数,使用模块node-java-caller


推荐