mac 上在 Rails 里调用一段 Java 程序,想了想觉得有几种方式
想问问社区的前辈们应该怎么选择,或者有其他更好的方式?
开个 jetty 提供 http 服务很轻量,2 秒启动
(曾经用这个开 oracle 数据库的后台) ...
jruby
考虑可维护性的话 http+json 或者 rpc 什么的。
以前用过 rjb 去调 poi 可以试试
可以试试 rabbitmq
#1 楼 @luikore 哪要 2 秒
thrift 感觉可以一试
不是有个 jruby 吗,
如果 java 程序是一个库,可以用 RJB 去调用 java 里面的方法,速度比 命令行快得多。 缺点是可能影响多线程。例如以下程序。
require "rjb" Rjb::load(File.join(File.dirname(__FILE__), '..', '..', '..', 'ext', 'iText-2.1.4.jar'), ['-Djava.awt.headless=true']) def self.itext_merge(filenames, output) class_pdfreader = Rjb::import('com.lowagie.text.pdf.PdfReader') class_pdfcopyfields = Rjb::import('com.lowagie.text.pdf.PdfCopyFields') class_filestream = Rjb::import('java.io.FileOutputStream') filestream = class_filestream.new(output) copy = class_pdfcopyfields.new(filestream) failure_list = [] filenames.each do |f| # remove double quote if match = /"(.*)"/.match(f) f = match[1] end if File.exists?(f) begin copy.addDocument(class_pdfreader.new(f)) rescue => e failure_list << f Rails.logger.info "PdfMerger: Invalid PDF: #{f}" end else failure_list << f Rails.logger.info "PdfMerger: File does not exist: #{f}" end end copy.close() # pages = class_pdfreader.new(output).getNumberOfPages Rails.logger.info "failed pdf: #{failure_list}" if failure_list.present? return failure_list.empty? rescue Exception => e Rails.logger.info "itext_merge failure: #{e.message}" return false end