java 执行JavaScript 以及容器化的问题

1. 可选方案
 
  a. jdk 6 开始内置的Rhino 引擎
  b. jdk8 替换的nashorn (性能高,对于ECMA 支持更好)
  c. java 版的nodejs vertx.io
 
2. 实践操作
public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");
        try {
            int value=2;
            SimpleBindings bind=new SimpleBindings();
            SimpleBindings bind2=new SimpleBindings();
            SimpleBindings bind3=new SimpleBindings();
            bind.put("点数", value);
            bind2.put("a", value);
            bind2.put("b", value);
            bind3.put("a1", value+1);
            bind3.put("b1", value+2);
             System.out.println(engine.eval("点数<50?50:Math.ceil(56/50)*50",bind));
            System.out.println(engine.eval("demosum=function(a,b){return a+b}; demosum(a,b);",bind2));    // 定义方法,并调用支持参数绑定
            System.out.println(engine.eval("(function(a1,b1){function demosub(a,b){ return a+b;}return demosub(a1,b1)})(a1,b1)",bind3));    // 使用js 立即执行函数
          } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
 
3. docker 容器处理
 
 docker 容器实践有一个原则就是容器的镜像要尽可能的小
一般大家会选择使用 alpine linux 发行版本
对于Dockerfile 如下:
FROM frolvlad/alpine-oraclejdk8:full
VOLUME /tmp
ADD demo.class demo.class
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","app"]
 
注意镜像的tag 选择使用 full 
执行结果
 



posted on 2017-08-05 13:30  荣锋亮  阅读(845)  评论(0编辑  收藏  举报

导航