对于易变业务,可以将其内容放在脚本中。
修改脚本中的业务代码,不需要重启JVM,可以随时发布而不用重新部署。
function formula(var1, var2){ return var1 + var2 * factor;}
保存为model.js
1 import java.io.FileReader; 2 import java.util.Scanner; 3 4 import javax.script.Bindings; 5 import javax.script.Invocable; 6 import javax.script.ScriptContext; 7 import javax.script.ScriptEngine; 8 import javax.script.ScriptEngineManager; 9 10 /** 11 * @文件名: GeiJS.java12 * @功能描述: 在java中引入js的例子13 * @说明:对于经常变化的业务。可以放在脚本语言中 14 * @author SunF15 * @date 2014-3-31 上午10:56:13 16 * 17 */18 public class GeiJS {19 20 public static void main(String[] args) throws Exception {21 //获得一个JavaScript的执行引擎22 ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");23 //建立上下文变量24 Bindings bind = engine.createBindings();25 bind.put("factor", 2);26 //绑定上下文,作用域是当前引擎范围27 engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);28 Scanner input = new Scanner(System.in);29 while(input.hasNextInt()){30 int first = input.nextInt();31 int sec = input.nextInt();32 System.out.println("输入的是:"+first+" , "+sec);33 //执行js代码34 engine.eval(new FileReader("src/js/model.js")); //抛出异常35 //是否可调用方法36 if(engine instanceof Invocable){37 Invocable in = (Invocable)engine;38 //执行js中的函数39 Double result = (Double) in.invokeFunction("formula", first,sec);40 System.out.println("运算结果:" + result);41 }42 }43 }44 }