编程日记 2018年3月24日


编程日记 2018年3月24日

JDK 自带的Groovy脚本引擎是支持并发的

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");
ScriptEngineFactory f = engine.getFactory();
System.out.println(f.getParameter("THREADING"));

将会输出:MULTITHREADED

这代表着它是支持多线程的,但是线程之间的状态是可见的(为保证线程安全性,不要修改共享状态变量,即Binding值)。

不同的引擎会输出不同的值,具体的含义如下:

null 
- 引擎实现不是线程安全的,并且无法用来在多个线程上并发执行脚本。 

"MULTITHREADED" 
- 引擎实现是内部线程安全的,并且脚本可以并发执行,尽管在某个线程上执行脚本的效果对于另一个线程上的脚本是可见的。 

"THREAD-ISOLATED" 
- 该实现满足 "MULTITHREADED" 的要求,并且引擎为不同线程上执行的脚本中的符号维护独立的值。 

"STATELESS" 
- 该实现满足 "THREAD-ISOLATED" 的要求。此外,脚本执行不改变 Bindings 中的映射关系,该 Bindings 是 ScriptEngine 的引擎范围。具体来说,Bindings 及其关联值中的键在执行脚本之前和之后是相同的。 

帮助同事解决JavaWeb程序调用Kettle作业的程序

问题:

Kettle是一个ETL工具,由Java语言开发,同事B在Kettle中画了一个作业流程,然后将作业流程和转换流程发给同事C,同事C直接通过Kettle提供的API即可调用Kettle作业。
同事C需要引用Kettle所需的Jars, 但是这导致了Jar包冲突,解决办法就是将原来的Maven工程中的冲突jar包移除,然后用System Provider的形式应用Kettle jar包

原则:

调用第三方程序的时候,特别是需要引入Jar文件,尽量使用新的Maven模块,不要在原来的Maven模块中引入