Java解析Groovy和Shell的代码
来源:互联网 发布:软件出厂测试大纲 编辑:程序博客网 时间:2024/06/06 14:20
一、使用场景
在整个系统中,通用型的代码基本没什么变化,需要变动的仅仅是业务相关的代码。那么我们就会把一些业务代码简单编码一下放在数据库中。通过数据库的配置,可以直接从数据库中查找出来编码处理一下,来调用,这样,会省去了不少重复上线的繁琐了。
二、项目实战
1.解析Groovy代码
private static GroovyClassLoader loader; /** * 调用Groovy代码 * @param code 数据库取出的代码 * @param params 调用方法的参数 * @return 返回值 */ private Object processGroovyCode(String code, DyncCallParameter params) { Object ret = null; if (StringUtils.isNotBlank(code)) { loader = new GroovyClassLoader(ScheduleJob.class.getClassLoader()); code = Base64.decode(code, "utf-8"); try { Class groovyClass = loader.parseClass(code); GroovyObject scriptInstance = (GroovyObject) groovyClass.newInstance(); ret = scriptInstance.invokeMethod("doTask", params); } catch (Exception e) { LOG.error("执行Groovy代码时抛错:", e); } } return ret; }
2.解析Shell
/** * 调用Shell代码 * @param code 数据库取出的代码 * @param params 调用方法的参数 * @return 返回值 */ private Object processShellCode(String code, DyncCallParameter params) { Object ret = null; if (StringUtils.isNotBlank(code)) { code = Base64.decode(code, "utf-8"); try { ret = runShell(code, params); } catch (Exception e) { LOG.error("执行Shell脚步抛错:", e); } } return ret; } /** * 执行shell脚本并返回结果 * * @param shStr * @return * @throws Exception */ private List runShell(String shStr, DyncCallParameter params) throws Exception { List<String> strList = new ArrayList(); Process process; process = Runtime.getRuntime().exec(shStr); InputStreamReader ir = new InputStreamReader(process.getInputStream()); LineNumberReader input = new LineNumberReader(ir); String line; process.waitFor(); while ((line = input.readLine()) != null) { strList.add(line); } return strList; }
对于Shell的调用,入参的结构复杂了,会不好处理。因为Shell本身的原因,调用shell时没有使用入参,这个比较棘手。
阅读全文
0 0
- Java解析Groovy和Shell的代码
- Groovy 是没有类型的 Java 代码
- Groovy嵌入Java代码
- 实战 Groovy: Groovy:Java 程序员的 DSL——用 Groovy 编写更少的代码,完成更多的工作
- Groovy创建和解析json
- Groovy XML解析和构建
- Groovy Json解析和构建
- Groovy创建和解析json
- Groovy xml生成和解析
- Groovy 解析json和闭包的使用
- Groovy探索之Gpath和List的结合 更加Groovy风格的代码
- java调用、执行groovy代码
- JAVA代码执行shell命令 并解析
- Groovy与Java代码间的互操作
- Groovy与Java代码间的互操作(转)
- 实战 Groovy: Groovy:Java 程序员的 DSL
- 实战 Groovy: Groovy:Java 程序员的 DSL
- gradle风格的groovy代码
- Java 8实战之读书笔记三:函数式数据处理
- Java 8实战之读书笔记四:高效Java 8编程
- Java 8实战之读书笔记五:超越Java 8
- Quartz的简单使用
- Quartz实现数据库动态配置定时任务
- Java解析Groovy和Shell的代码
- 结构体相互嵌套使用的条件?
- Linux Network Namespace
- Active MQ(一)--消息队列基本概念介绍
- Notification进度条通知
- Spring学习之使用注解配置AOP
- 同步整流能提升开关电源瞬态响应?
- HDU2002求球的体积
- MySQL的事务隔离级别