从Node.js应用程序调用java程序

rau*_*aul 8 java node.js express

根据我的阅读,有几种方法可以javanode.js应用程序中运行文件.一种方法是生成子进程:( java代码与可执行文件中的依赖项打包在一起jar.)

var exec = require('child_process').exec, child;    
child = exec('java -jar file.jar arg1 arg2',
      function (error, stdout, stderr){
        console.log('stdout: ' + stdout);
        console.log('stderr: ' + stderr);
        if(error !== null){
          console.log('exec error: ' + error);
        }
    });
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用java - npm模块(链接),一个包装器JNI(这将让我创建objects,设置和获取attributes,运行methods).

在生产环境中,当我希望我的node.js(Express)服务器调用java程序(它只是将图像保存到本地目录)时,请告诉我哪个是更好的方法来实现这一点(就最佳实践而言).此外,还有一个很长的列表arguments,我需要传递给main类,并在命令行上这样做有点困难.我应该java从输入文件中读取程序吗?

Ana*_*Rao 6

1) 如果您使用exec,您将运行整个程序,而如果您使用 JNI 接口,您将能够直接与 jar 中的库和类进行交互,并执行诸如调用单个函数或创建一类。但是,如果您不需要类似的东西,我认为使用exec要简单得多,而且运行速度也会更快。听起来您只想将 Java 应用程序作为独立进程运行,并记录应用程序是成功完成还是出现错误。我会说最好只是使用exec它。以这种方式执行子进程也有利于调试,有时调试 JNI 错误会非常困难。

2)至于是否从文件中读取参数,是的,从某种文件中读取通常比直接传入参数更好。它不太容易出现人为错误(即每次都输入参数),并且更易于配置。如果像 QA 工程师这样的人只需要编辑一个配置文件来交换选项,他们就不需要了解你的整个代码库来测试它。我个人为我编写的每个 Java 程序使用配置文件。