手机屏幕网站西宁房地产网站建设

bicheng/2026/1/27 12:10:05/文章来源:
手机屏幕网站,西宁房地产网站建设,营销型网站案例,推广渠道方式一、引言 最近作者的平台项目需要实现前端输入脚本#xff0c;后端在用户设置好的一些情况下运行这段脚本。后端是java#xff0c;所以我们采用Groovy脚本。 所以要实现的功能就是动态的Groovy脚本#xff01; 二、Groovy介绍 了解groovy和python的就可以直接到第三章了 2…一、引言 最近作者的平台项目需要实现前端输入脚本后端在用户设置好的一些情况下运行这段脚本。后端是java所以我们采用Groovy脚本。 所以要实现的功能就是动态的Groovy脚本 二、Groovy介绍 了解groovy和python的就可以直接到第三章了 2.1 优缺点 Groovy是一种基于Java虚拟机JVM的动态编程语言它结合了静态类型语言和动态类型语言的特性。下面是Groovy的一些优点和缺点 优点 1、与Java的无缝集成 Groovy可以直接在Java代码中使用与Java代码可以互相调用。这种无缝集成使得在现有Java项目中引入Groovy变得非常容易。 2、动态语言特性 Groovy支持动态类型、元编程和闭包等特性使得代码编写更加灵活和简洁。它提供了更简洁的语法和更少的样板代码提高了开发效率。 3、丰富的语法特性 Groovy提供了许多便利的语法特性如集合操作、字符串处理、正则表达式等。它还支持DSL领域特定语言的编写使得代码更易读、更具表达力。 4、可读性强 Groovy的语法设计力求简洁、易读使得代码更加清晰和易于理解。它具有更少的冗余代码和更自然的表达方式。 缺点 1、性能 相对于JavaGroovy的执行速度可能会慢一些。这是由于动态类型和动态特性的引入以及Groovy的动态编译过程所导致的。然而对于大多数应用程序而言Groovy的性能仍然足够好。 2、工具和库支持 相对于JavaGroovy的工具和库生态系统相对较小。虽然Groovy可以直接使用Java的库但有些库可能没有专门为Groovy进行优化或提供更高级的Groovy API。 2.2  Groovy和Python比较 Groovy和Python都是流行的动态编程语言它们有一些相似之处但也有一些区别。下面是Groovy和Python之间的一些比较 1、语法和风格 Groovy的语法与Java非常相似因此对于Java开发者来说学习和使用Groovy相对容易。它也支持类似Java的面向对象编程风格。         Python的语法更加简洁和优雅具有非常清晰的语法结构。它采用了缩进来表示代码块使得代码更易读。 2、类型系统 Groovy是一种动态类型语言它允许变量在运行时动态地改变其类型。这使得Groovy更加灵活但也可能导致一些类型相关的错误。         Python也是一种动态类型语言但它具有更严格的类型系统。Python 3引入了类型提示Type Hints的功能可以在代码中指定变量的类型提高了代码的可读性和可维护性。 3、生态系统和库支持 Python拥有非常庞大和活跃的生态系统有大量的第三方库和工具可供使用。这使得Python成为数据科学、Web开发、自动化脚本等领域的首选语言。         Groovy的生态系统相对较小但它可以直接使用Java的库。对于Java开发者来说Groovy可以无缝集成到Java项目中享受Java生态系统的优势。 4、性能 通常情况下由于其动态特性Groovy的执行速度可能比Python慢一些。然而对于大多数应用程序而言这种差异并不明显因为它们通常受限于I/O等其他因素。         Python通常被认为是一种相对较慢的语言但通过使用C扩展和优化技术可以提高Python的性能。 5、用途和应用领域 Python在数据科学、人工智能、Web开发、自动化脚本等领域具有广泛的应用。它拥有丰富的库和工具如NumPy、Pandas、Django等使得开发更加便捷。         Groovy在Java开发领域应用广泛特别适用于构建DSL领域特定语言、编写脚本和快速原型开发。 三、动态脚本 1、pom dependencygroupIdorg.codehaus.groovy/groupIdartifactIdgroovy/artifactIdversion3.0.8/version/dependency 2、前端 既然是动态的就需要用户随意填写即使有限制也是在后端进行权限之类的限制然后向用户说明使用规则给用户提供一些基础类 所以前端只要给一个输入脚本的内容框就好 3、后端 3.1 运行groovy脚本 用户的脚本其实就是一个字符串要运行这段字符串怎么实现 作者使用的是GroovyShell看起来很简单但是这只是开始随着后面的拓展需要考虑很多细节 String script param.getContent();// 创建GroovyShellGroovyShell shell new GroovyShell();// 运行Groovy脚本Object response shell.evaluate(script); 3.2 传入参数给脚本        第一个要考虑的就是一些参数可能是前面的逻辑带过来的比如操作类型、订单、费用之类的那就需要把这些参数带给脚本 // 创建绑定变量Binding binding new Binding();binding.setVariable(orderId, orderId);binding.setVariable(parameter, parameter);// 创建GroovyShellGroovyShell shell new GroovyShell(binding);// 运行Groovy脚本Object response shell.evaluate(script); 3.2 基础工具 脚本是要用来做逻辑的不可能每次都是前面的逻辑把数据准备好然后传递给脚本计算。 所以要把一些基础功能包装好比如查数据库、调用接口 查数据库就用到之前的一篇文章了通过动态的多数据源暴露出一个工具类让脚本拿到这个类指定数据库和sql就可以进行查询 架构十Mybatis动态数据源及其原理_mybatis 动态数据源-CSDN博客 Component public class CommonGateWayImpl implements CommonGateWay {Resourceprivate CommonQueryMapper commonQueryMapper;Overridepublic ListHashMap executeSql(String db, String sql) {DataSourceThreadLocal.setDB(db);ListHashMap res commonQueryMapper.query(sql);DataSourceThreadLocal.clearDB();return res;} } 调用接口基本上每家公司都不太一样但是原理是相似的都是根据系统标识找到一个可用的节点拿到节点的url调用这个url方法把请求参数转json作为消息体传过去 所以调用接口的工具类至少要有这两个方法合并成一个也行需要跟自己公司的注册中心打通一下让中间件团队提供查询节点的功能。然后如果有权限校验的也要开一下免得调用不通。 Component public class ExecuteInterfaceUtil {public String getUrl(String systemCode, String action) {ListUrlEntity urlList //查系统所有节点if (CollectionUtilsExt.isBlank(urlList)) {return null;}String url urlList.size() 0 ? urlList.get(0).getUrl() : ;url url action;return url;}public String execute(String url, String body, HashMap parameter) {// 发送Http请求return response;} } 3.3 SpringBoot取Bean 也是在写脚本执行的时候发现还需要一个功能就是从SpringBoot的bean工厂取Bean不然自己new一个对象是调用不了这里面的方法的而且new也不优雅这是基础工具又不是数据包装 所以就要找一下实现的方法其实经常用的功能 import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component;Component public class SpringUtil implements ApplicationContextAware {// 应用上下文环境private static ApplicationContext context;SuppressWarnings(static-access)Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {context applicationContext;}public static ApplicationContext getContext() {return context;}/*** 根据bean name 获取对象** param name* return*/public static T T getBean(String name) {return (T)context.getBean(name);}/*** 根据Class获取对象* * param clazz* param T* return* throws BeansException*/public static T T getBean(ClassT clazz) throws BeansException {return context.getBean(clazz);} } 4、脚本 底层都准备好了那就可以写脚本试一试了包名和导入的工具类路径都是必须的groovy执行的时候都需要导入 这里演示了一下查完db数据之后再去查接口明细 package ***.groovyimport ***.JSONUtil import ***.StringUtilsExt import ***.SpringUtil import ***.ExecuteInterfaceUtil import ***.CommonGateWay import org.apache.curator.shaded.com.google.common.collect.ListsCommonGateWay commonGateWay SpringUtil.getBean(CommonGateWay.class) ExecuteSoaUtil executeInterfaceUtil SpringUtil.getBean(ExecuteSoaUtil.class) ListHashMap dataList commonGateWay.executeSql(orderDb, SELECT TOP 10 orderId FROM order ORDER BY update_time DESC;) if (dataList null || dataList.size() 0) {return dataList } String url executeInterfaceUtil.getUrl(abc, getDetail) if (url null || url.length() 0) {return dataList } ListHashMap res new ArrayList() for (HashMap map : dataList) {HashMap body new HashMap(2)body.put(orderIdList, Lists.newArrayList(map.get(orderid)))String response executeInterfaceUtil.execute(url, JSONUtil.toJson(body), null)if (StringUtilsExt.isBlank(response)) {return res}HashMapString, Object interfaceMap JSONUtil.parse(response, HashMap.class)res.add(soaMap)for (Map.EntryString, Object entry : interfaceMap.entrySet()) {Object value entry.getValue()if (!(value instanceof Integer) !(value instanceof String)) {entry.setValue(JSONUtil.toJsonNoException(value))}}if (!interfaceMap.containsKey(responseCode) || (int) interfaceMap.get(responseCode) ! SUCCESS) {return res} } return res 再看看执行结果 四、总结 动态的脚本这样就实现了其实用python也可以java也有支持python的执行库不过用起来就有点曲折了。 即使用得是和java无缝集成的Groovy过程也是有点绕弯的而且还有一些小坎没写写出来会降低作者的逼格毕竟很多时候调试开发遇到的都是一些很小的问题一下子没转过来事后想想又觉得脑子丢了一会。 有兴趣的同学可以在评论区和作者讨论自己项目的疑难杂症一起交流进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上海建设银行网站首页重庆建设工程施工安全管理网

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、 压力等,可能会对婴儿的认知、情…

网站推广站点建设与策划深圳百度竞价托管公司

word List 13 如果存在什么问题,欢迎批评指正!谢谢!

网站推广工具工作室seo网站优化快速排名软件

文章分类 生产调度优化问题入门相关问题求解调度问题求解效率探讨相关论文解读 生产调度优化问题入门 文章包含重点简述生产车间调度优化问题两种常用的FJSP模型解析FJSP问题的标准测试数据集的Python代码解析FJSP标准测试数据代码 相关问题求解 文章求解器问题类型【作业车…

做 英语试题的网站百度手机网站生成

一、VSCode安装 二、配置安装插件 三、配置远程连接SSH 四、MinGW 一、VSCode安装 VS官网 Visual Studio Code - Code Editing. Redefined下载安装包: 二、配置安装插件 安装中文插件 配置字体为20 配置文件–>首选项->设置->Font Size为20 设置 VSC…

做百度手机网站优化怎么做网页啊

css3javaScript实现一个左右钟摆-摇晃的红灯笼网页特效!前天逛博客时无意中看见了,别人的博客顶部有一个会左右钟摆的摇晃的红灯笼,产生了想法,我也想给自己做一个,但是网上找了很多方案,都没有实现。终于在…

做一个招聘信息的网站_用什么做网站的软件南京一对一网站建设

Linux 查看系统类型和版本 首先普及下linux系统的版本内容1. 查看linux系统内核版本2. 查看linux系统发行版本 首先普及下linux系统的版本内容 内核版本和发行版本区别 内核版本就是指 Linux 中最基层的代码,版本号如 Linux version 3.10.0-327.22.2.el7.x86_64发行…

做3d打印网站服务品牌策划方案

目录结构 www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─ ... 更多类库目录 │ │ │ ├─common.php 公共函数文件 │ └─event.ph…

dicuz和wordpress整合seo顾问服务

近日,全球投资界的巨擘巴菲特发布了2024年致股东的公开信,引起了广泛关注。作为伯克希尔哈撒韦公司的董事长和首席执行官,巴菲特的信函一直备受投资者们的期待。在这封公开信中,巴菲特分享了关于投资、公司治理和全球经济等方面的…

黑龙江网站建设费用公司网站设计 杭州 推荐

HTTP 确认访问用户身份的认证 某些Web页面只想让特定的人浏览,或者干脆仅本人可见。为达到这个目标,必不可少的就是认证功能。 何为认证 计算机本身无法判断坐在显示器前的使用者的身份。进一步说,也无法确认网络的那头究竟有谁。可见,为了弄清究竟是谁在访问服务器,就…

找网站建设公司哪家好赤峰网站设计公司

作为一家在2021年在美国纳斯达克上市的云端备份公司,Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告,给大家提供了一份真实应用场景下的稳定性分析参考数据。 本文我们主要看下Backblaze最新发布的2023中期SSD相关故障稳定性数据报告。…

农村电子商务网站建设ftp上传文件到网站

文章目录 1. Kafka 消费者是什么?2. Kafka 消费者组的概念?3. Kafka 消费者和消费者组有什么关系?4. Kafka 多个消费者如何同时消费一个分区? 1. Kafka 消费者是什么? 消费者负责订阅Kafka中的主题,并且从…

中国小康建设网 官方网站七初SEO网站建设

1控件拖入画板: 2属性配置: 1轨迹颜色 2 3 4

网站建设岗位要求wordpress更改目录插件

1.什么是UML UML是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件…

怎么做售房网站做阅读理解的网站

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…

wordpress html页面缓存 cdn上海排名优化seo

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法开篇与决策树部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

韶关企业网站建设公司苏州网页设计制作

文章目录 Flutter Admin TemplateLive demo: https://githubityu.github.io/live_flutter_adminWeb 优化 Setup登录注册英文 亮色主题 中文 暗黑主题管理员登录权限 根据权限动态添加路由 第三方依赖License最后参考学习 Flutter Admin Template Responsive web with light/da…

公司网站建设费用怎么入账促销方法100种

BetaFlight飞控AOCODAF435V2MPU6500固件编译 1. 源由2. 准备2.1 板子2.2 代码2.3 工具 3. 配置修改4. 编译4.1 获取代码4.2 获取配置4.3 编译固件4.4 DFU烧录4.5 版本核对 5. 总结 1. 源由 刚拿到一块Aocoda F405V2 (MPU6500) AT32F435飞控板(替换主控芯片)。 Aocoda-RC F40…

德州做网站最好的公司北京南站地铁几号线

SQL 中的 substring 函数是用来抓出一个栏位资料中的当中一部分。这个函数的名称在不同的资料库中不全然一样: MySQL: SUBSTR( ), SUBSTRING( )Oracle: SUBSTR( )SQL Server: SUBSTRING( )最经常使用到的方式例如以下 (在这里我们用 SUBSTR( ) 为例): SU…

平邑哪里有做网站的wordpress 附件搜索

今天浏览项目时候,遇到一个问题,页面用${requestScope.参数名 }获取的值是乱码,然后搜了一下,最后说是编码的问题,附上查找的结果:在Java 开发中,如果框架搭建的不完善或者初学者在学习过程中&a…

做网站编程用什么语言好wordpress admin-ajax.php

传送门 文章目录题意:思路:题意: 求一棵树的每对叶子节点之间距离平方的和。 思路: 这个题貌似可以容斥,但是我不会,所以我写了个淀粉质。 要知道,淀粉质的思想就是将子树内部的递归处理&…