# java-tools **Repository Path**: nisichengjava/java-tools ## Basic Information - **Project Name**: java-tools - **Description**: 工具箱 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-11 - **Last Updated**: 2025-11-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java-tools #### 介绍 项目上会对接不同厂家的数据,每个厂家数据格式都不一致,所以使用脚本的方式进行动态处理,这样就不用定制化开发转换工具了。
目前该项目使用 GraalVM+JavaScript 执行js脚本,速度还可以,处理1K左右的json数据大概在几毫秒 #### 软件架构 springBoot2.7+jdk21 #### 安装教程 1. 优先使用jdk21,因为有虚拟线程 2. 启动springboot项目,然后请求POST接口
http://localhost:28080/api/v1/process `(http://localhost:28080/api/v1/process2接口js执行速度会慢几毫秒)`
请求参数如下
``` { "address": { "deviceId": "温湿度传感器", "pointList": [ { "pointName": "温度", "pointCode": "temperature", "pointVale": "35.1", "ts": "2025-07-11 15:00:00" }, { "pointName": "湿度", "pointCode": "humidity", "pointVale": "55.1", "ts": "2025-07-11 15:00:00" } ] } } ``` 3. 接口调用通了之后控制台会打印执行的时间和解析后的json
![输入图片说明](src/main/resources/%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_17522204475958.png) #### 使用说明 1. js脚本代码如下 ```public static String loadScriptFromDB() { // 从数据库加载JS脚本 return "function transform(input) {\n" + " const data = JSON.parse(input);\n" + " var deviceId=data.address.deviceId;\n" + " var pointList=data.address.pointList;\n" + " var pointInfo={};\n" + " if (Array.isArray(pointList) || typeof pointList === 'string') {\n" + " for (let i = 0; i < pointList.length; i++) {\n" + " pointInfo[pointList[i].pointCode]=pointList[i].pointVale;\n" + " }\n" + " } else {\n" + " console.log('变量不是数组或字符串');\n" + " }\n" + " \n" + " var deviceInfo={};\n" + " deviceInfo[\"deviceId\"]=deviceId;\n" + " deviceInfo[\"ts\"]=Date.now();\n" + " deviceInfo[\"pointInfo\"]=pointInfo;\n" + " return JSON.stringify(deviceInfo); \n" + "}\n" + "transform(input);"; }``` 2. 上面的js代码 根据自己的数据json格式去更改,一般都是保存在数据库中,从数据库中读取脚本内容。 3. 有更好的处理方法,欢迎一起讨论,欢迎指教。