数据对接组件能够将系统解耦,将传统需要写在应用系统中的对接代码进行可配置化。
目前对接接入节点支持数据库(mysql、oracle、sqlserver、sybase)、ibmmq、websocket、socketio、mqtt、redis、http、webservice、rabbitmq,输出节点支持http回调、文件存储、数据库存储(mysql、oracle、sqlserver、sybase)、redis、mqtt、rabbitmq发布。
输入节点,可通过配置多个输入节点如http、mysql、sqlserver、oracle、webservice等,对数据进行采集。
模块节点是输入节点和输出节点的子节点。一个模块节点对应一个数据对接组件,模块节点不可重复,即相同模块名的节点只能有一个。
<!-- 输入节点配置 --> <dataIn> <!--数据库模块输入节点--> <module name="data-in-database"><!--此处是模块具体配置--></module> <!--HTTP模块输入节点--> <module name="data-in-http"><!--此处是模块具体配置--></module> <!--IBM WebSphere MQ模块输入节点--> <module name="data-in-ibmmq"><!--此处是模块具体配置--></module> <!--MQTT模块输入节点--> <module name="data-in-mqtt"><!--此处是模块具体配置--></module> <!--RabbitMq模块输入节点--> <module name="data-in-rabbitmq"><!--此处是模块具体配置--></module> <!--Redis模块输入节点--> <module name="data-in-redis"><!--此处是模块具体配置--></module> <!--SocketIO模块输入节点--> <module name="data-in-socketio"><!--此处是模块具体配置--></module> <!--WebService模块输入节点--> <module name="data-in-webservice"><!--此处是模块具体配置--></module> <!--WebSocket模块输入节点--> <module name="data-in-websocket"><!--此处是模块具体配置--></module> </dataIn>
模块节点 | 模块说明 | 子节点 |
---|---|---|
data-in-database | 数据库模块,支持MySQL、SqlServer、Oracle、SyBase,支持多数据源。 | database |
data-in-http | HTTP模块,支持发起HTTP请求,可附带参数,支持Get,Post,可同时连接多个不同的URL地址。 | http |
data-in-ibmmq | IBM WebSphere MQ模块,支持实时消息监听,可同时维护多个监听客户端。 | ibmmq |
data-in-mqtt | MQTT模块,支持实时消息监听,支持通过http给指定主题发送消息。可同时维护多个监听客户端。 | mqtt |
data-in-rabbitmq | RabbitMq模块,支持实时消息监听。可同时维护多个监听客户端。 | rabbitmq |
data-in-redis | Redis模块,支持实时消息监听,支持通过http给指定主题发送消息。可同时维护多个监听客户端。 | redis |
data-in-socketio | SocketIO模块,支持实时消息监听。可同时维护多个监听客户端。 | socketio |
data-in-webservice | WebService模块,可附带参数,可同时连接多个不同的地址。 | webservice |
data-in-websocket | WebSocket模块,支持实时消息监听,可同时维护多个监听客户端。 | websocket |
<!-- 关系型数据库对接方式比如mysql、oracle、sqlserver、sybase --> <!-- id必须唯一 --> <!-- 此处database可以写多个 --> <!--database id必须唯一--> <database id="database1"> <!-- 数据库连接属性 --> <connect> <!-- 数据库JDBC连接地址 必填。url地址为标准的jdbc连接地址--> <url> jdbc:mysql://localhost:3306/swams?useUnicode=true&characterEncoding=utf8&useSSL=false </url> <!-- 数据库用户名 必填--> <username> root </username> <!-- 数据库密码 必填--> <password> 123456 </password> <!-- sql语句编译缓存 非必填。默认开启预编译--> <!--<cachePrepStmts> true </cachePrepStmts>--> <!-- sql语句编译缓存数 非必填。预编译默认缓存数为250--> <!--<prepStmtCacheSize> 250 </prepStmtCacheSize>--> <!-- 数据库编译缓存数限制 非必填。预编译默认限制为2048 --> <!--<prepStmtCacheSqlLimit> 2048 </prepStmtCacheSqlLimit>--> <!--等待来自池的连接的最大毫秒数 非必填。默认值为30000--> <!--<connectionTimeout> 30000 </connectionTimeout>--> <!--连接允许在池中闲置的最长时间 非必填。默认值600000--> <!-- <idleTimeout> 600000 </idleTimeout>--> <!--池中连接最长生命周期 非必填。默认值1800000--> <!--<maxLifetime> 1800000 </maxLifetime>--> <!--池中维护的最小空闲连接数 非必填。默认值10--> <!--<minimumIdle> 10 </minimumIdle>--> <!--池中最大连接数,包括闲置和使用中的连接 非必填。默认值10--> <!--<maximumPoolSize> 10 </maximumPoolSize>--> </connect> <!-- task:任务 task属性: cron:任务执行频率,如"* * * * * ?" 一秒一次 可以按照一定的频率执行SQL name:任务名称,任务名称必须唯一 数据库的task可以被http访问,访问地址为http://ip:port/api/data/data-in-database/{taskName:如queryDeptsTask}?自定义参数如(deptName=心脏内科) 自定义参数可以传入到sql中作为条件。 --> <!-- cron:配置sql语句执行频率的cron表达式 --> <task name="queryDeptsTask"> <!--sql语句,必填--> <!-- sql支持freemarker语法进行渲染,如select * from dept where dept_name='' --> <sql id="queryDepts"> <![CDATA[ select * from dept where 1=1 and 2=2 <#if deptName??> and dept_name='' </#if> ]]> </sql> <!-- 结果值映射 非必填--> <!-- resultMap:结果值映射,将对接的结果数据列名进行转换等操作 resultMap节点属性: hiddenUnUsed:true/false,是否将未在resultMap中指定的列隐藏。不设置属性,默认false,默认不隐藏 transCode:true/false,是否将iso88591的字符串编码转GBK,防止乱码。不设置属性,默认false,默认不转码。 --> <resultMap> <!-- result: column:原始列名 property:转换后的属性名 filter:true/false,是否将这个值进行过滤移除 expression:支持javascript表达式值转换,比如将性别0,1转成男,女可以这么写:expression="{0:'男','1':'女'}[data]" 支持调用JS库中的函数。如打印数据expression="print(data,rowData); data表示当前列的值,rowData表示当前行所有列的值。 注意:如果需要在结果中追加某一个属性,请不要设置column属性,即将该属性移除。 --> <result column="dept_code" property="deptCode"/> </resultMap> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression=""/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </database>
<http id="http1"> <!-- name:任务名称 不可重复 必填 cron:任务执行频率,如"* * * * * ?" 一秒一次 可以按照一定的频率执行HTTP请求。非必填 --> <task name="httpTask" cron=""> <connect> <!--url:http请求地址 必填--> <url>http://localhost:8080</url> <!--param:http请求参数 非必填--> <!--<params> <param name="" value=""/> </params>--> <!--http请求类型:post/get 不填默认post--> <!--<type>post</type>--> <!--http请求失败是否重试,默认不重试。-1:不断重试,0:不重试 1~n: 重试n次--> <!--<retry>0</retry>--> <!--http重试时间间隔,默认1000ms--> <!--<retry-time>1000</retry-time>--> <!--http请求超时时间,非必填。默认2000ms--> <!--<timeout>2000</timeout>--> <!--http请求内容类型,非必填。默认application/json--> <!--<content-type>application/json</content-type>--> <!--header:http请求头 非必填--> <!--<header> <item name=""></item> </header>--> </connect> <!-- 结果值映射 非必填--> <!-- resultMap:结果值映射,将对接的结果数据列名进行转换等操作 resultMap节点属性: type:json/xml 设置要处理的数据类型。默认为json。如果要处理的数据类型为字符串,请不要使用resultMap,而要使用resultHandler进行值处理。 hiddenUnUsed:true/false,是否将未在resultMap中指定的列隐藏。不设置属性,默认false,默认不隐藏 transCode:true/false,是否将iso88591的字符串编码转GBK,防止乱码。不设置属性,默认false,默认不转码。 --> <resultMap> <!-- result: column:原始列名 property:转换后的属性名 filter:true/false,是否将这个值进行过滤移除 expression:支持javascript表达式值转换,比如将性别0,1转成男,女可以这么写:expression="{0:'男','1':'女'}[data]" 支持调用JS库中的函数。如打印数据expression="print(data,rowData); data表示当前列的值,rowData表示当前行所有列的值。 注意:如果需要在结果中追加某一个属性,请不要设置column属性,即将该属性移除。 --> <result column="dept_code" property="deptCode"/> </resultMap> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression=""/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </http>
<!-- id唯一 --> <!-- 此处ibmmq可以写多个 --> <ibmmq id="ibmmq1"> <connect> <!-- MQ 服务IP --> <host>127.0.0.1</host> <!-- MQ 服务端口号 --> <port>8930</port> <!-- 队列管理器名字 --> <queue-manager>ECIS_QM</queue-manager> <!-- 通道名字 --> <channel>ECIS.SVRCONN</channel> <!-- 用户名 非必填--> <!-- <username>mqm</username> --> <!-- 密码 非必填--> <!-- <password>mqm</password> --> <!-- 超时时间 --> <receive-timeout>1000</receive-timeout> <!-- 编码 --> <encode>1208</encode> <!-- 消息获取频率 --> <wait-interval>1000</wait-interval> </connect> <!-- name:任务名称 不可重复 必填 mq任务,不同任务监听不同的队列。 --> <task name="ibmTask"> <!--监听的队列名称,如需监听多个,请设置多个task--> <queue>queue1</queue> <!-- 结果值映射 非必填--> <!-- resultMap:结果值映射,将对接的结果数据列名进行转换等操作 resultMap节点属性: type:json/xml 设置要处理的数据类型。默认为json。如果要处理的数据类型为字符串,请不要使用resultMap,而要使用resultHandler进行值处理。 transCode:true/false,是否将iso88591的字符串编码转GBK,防止乱码。不设置属性,默认false,默认不转码。 --> <resultMap type="xml"> <!-- result: type:list 或者不填 path:xml中的 css定位位置 name:映射后的属性值 value:text/节点的属性名字 expression:支持javascript表达式值转换,比如将性别0,1转成男,女可以这么写:expression="{0:'男','1':'女'}[data]" 支持调用JS库中的函数。如打印数据expression="print(data,rowData); data表示当前列的值,rowData表示当前行所有列的值。 --> <result path="POOR_IN200901UV creationTime" name="creationTime" value="value"/> <result path="POOR_IN200901UV" name="sender"> <result path="POOR_IN200901UV sender" name="senderv" value="typeCode"/> <result path="device" name="device" value="classCode"> <result path="item" name="item" value="root"/> </result> </result> </resultMap> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression=""/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </ibmmq>
<!-- id唯一 --> <!-- 此处mqtt可以写多个 --> <mqtt id="mqtt1"> <!--连接配置--> <connect> <!-- 主机地址 必填 --> <host>tcp://127.0.0.1:1883</host> <!-- 用户名 非必填--> <!--<username>bsj</username>--> <!-- 密码 非必填--> <!--<password>bsj123456</password>--> <!-- 重连时间间隔 非必填。默认5s--> <!--<reconnectTime>5</reconnectTime>--> <!-- 连接超时时间 非必填。默认不超时--> <!--<connectionTimeout>0</connectionTimeout>--> <!-- 心跳检测时间间隔 非必填。默认20s--> <!--<keepAliveInterval>20</keepAliveInterval>--> <!-- 自动重连 非必填。默认自动重连--> <!--<automaticReconnect>true</automaticReconnect>--> <!-- 是否清除session 非必填。默认清除session--> <!--<clearSession>true</clearSession>--> <!-- QOS服务质量 非必填。默认qos为1--> <!--<qos>1</qos>--> <!--maxInflight 非必填--> <!--<maxInflight>500</maxInflight>--> </connect> <!-- name:任务名称 不可重复 必填 Mqtt任务,不同任务订阅不同的主题。 --> <task> <!--订阅的主题,如需订阅多个主题,请设置多个task.--> <topic>test</topic> <!--订阅的主题消息类型 默认string,可输入值(string/hex)--> <!--string:表示消息可以直接解析为UTF-8字符串,hex:表示消息为16进制字符串字节数组--> <!--<topicType>hex</topicType>--> <!--结果值映射--> <!--如果mqtt返回值是字符串,则不需要此映射设置,直接使用resultHandler处理。如果返回类型为json或者xml则使用此映射。--> <!--<resultMap> <result></result> </resultMap>--> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression="print(data)"/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </mqtt>
<!-- id唯一 --> <!-- 此处rabbitmq可以写多个 --> <rabbitmq id="rabbitmq1"> <!--连接配置--> <connect> <!-- 主机地址 必填 --> <host>iot.h4kit.com</host> <!-- 端口 非必填 默认为5672--> <!--<port>5672</port>--> <!-- 用户名 非必填--> <!--<username>fengzx</username>--> <!-- 密码 非必填--> <!--<password>fengzx</password>--> <!-- 虚拟主机 非必填--> <!--<virtualHost>bsj</virtualHost>--> </connect> <!-- name:任务名称 不可重复 必填 RabbitMQ任务,不同任务监听不同的队列。 --> <task name="rabbitMqTask1"> <!--监听的队列,如需监听多个队列,请设置多个task.--> <queue>queue1</queue> <!--rabbitmq默认队列数据解析方式为字符串解析,如果需要解析序列化的对象,需要设置queueType标签,设置为json。--> <!--<queueType>json</queueType>--> <!--结果值映射--> <!--如果mqtt返回值是字符串,则不需要此映射设置,直接使用resultHandler处理。如果返回类型为json或者xml则使用此映射。--> <!--<resultMap> <result></result> </resultMap>--> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression="print(data)"/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </rabbitmq>
<!-- id唯一 --> <!-- 此处redis可以写多个 --> <redis id="redis-in"> <!--redis连接配置--> <connect> <!--redis主机地址 必填--> <host>127.0.0.1</host> <!--redis端口,非必填,默认6379--> <!--<port>6379</port>--> <!--redis密码 非必填--> <!--<password>123456</password>--> <!--redis数据库索引 非必填默认0--> <!--<index>0</index>--> <!--redis连接超时时间 非必填 默认5000ms--> <!--<timeout>5000</timeout>--> <!-- redis最大空闲 非必填 默认10--> <!--<max-idle>10</max-idle>--> <!--redis最小空闲 非必填 默认1--> <!--<min-idle>1</min-idle>--> <!--redis 最大连接 非必填 默认20--> <!--<max-total>20</max-total>--> <!--redis最大等待时间 默认1000ms--> <!--<max-wait-millis>1000</max-wait-millis>--> </connect> <!-- name:任务名称,不能重复 Redis任务,不同任务订阅不同的主题。 --> <task name="redisInTask"> <!--redis订阅主题 必填,根据实际情况设置。如果要订阅多个主题,可设置多个task--> <topic>test</topic> <!--结果值映射--> <!--如果mqtt返回值是字符串,则不需要此映射设置,直接使用resultHandler处理。如果返回类型为json或者xml则使用此映射。--> <!--<resultMap> <result></result> </resultMap>--> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression="print(data)"/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </redis>
<!-- id唯一 --> <!-- 此处socketio可以写多个 --> <socketio id="socketio-in"> <!--socketIO连接配置--> <connect> <!--socketIO连接地址,必填--> <url>http://localhost:3050/</url> <!--失败重试次数,非必填。默认无穷大--> <!--<reconnectionAttempts></reconnectionAttempts>--> <!--失败重连时间间隔,非必填。默认1000ms--> <!--<reconnectionDelay>1000</reconnectionDelay>--> <!--超时时间,非必填。默认500--> <!--<timeout>500</timeout>--> </connect> <!--name:任务名称 不能重复--> <task name="socketioTask"> <!--结果值映射--> <!--如果mqtt返回值是字符串,则不需要此映射设置,直接使用resultHandler处理。如果返回类型为json或者xml则使用此映射。--> <!--<resultMap> <result></result> </resultMap>--> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression="print(data)"/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </socketio>
<!-- id唯一 --> <!-- 此处webservice可以写多个 --> <webservice id="webservice1"> <!-- name:任务名称 不可重复 必填 cron:任务执行频率,如"* * * * * ?" 一秒一次 可以按照一定的频率执行请求。非必填 --> <task name="testTask"> <!-- 只能写一个 --> <!--webservice 请求地址和请求方法 必填--> <request url="http://localhost:9000/webservice/test?wsdl" method="sayHello"> <!--webservice soap请求报文,必须要填写。请求报文需要根据接口确定,每个接口不同--> <soapBody> <![CDATA[ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://www.PKU-HIT.com/hie/dsg/service"> <soapenv:Header/> <soapenv:Body> <ser:dept> <ser:userId></ser:userId> <ser:password></ser:password> </ser:dept> </soapenv:Body> </soapenv:Envelope> ]]> </soapBody> <!--webservice参数,根据实际情况填写--> <!--<params> <param name="user" value="bsj"/> <param name="passwd" value="123456"/> </params>--> </request> <!-- 结果值映射 非必填--> <!-- resultMap:结果值映射,将对接的结果数据列名进行转换等操作 resultMap节点属性: type:json/xml 设置要处理的数据类型。默认为json。如果要处理的数据类型为字符串,请不要使用resultMap,而要使用resultHandler进行值处理。 hiddenUnUsed:true/false,是否将未在resultMap中指定的列隐藏。不设置属性,默认false,默认不隐藏 transCode:true/false,是否将iso88591的字符串编码转GBK,防止乱码。不设置属性,默认false,默认不转码。 --> <resultMap> <!-- result: column:原始列名 property:转换后的属性名 filter:true/false,是否将这个值进行过滤移除 expression:支持javascript表达式值转换,比如将性别0,1转成男,女可以这么写:expression="{0:'男','1':'女'}[data]" 支持调用JS库中的函数。如打印数据expression="print(data,rowData); data表示当前列的值,rowData表示当前行所有列的值。 注意:如果需要在结果中追加某一个属性,请不要设置column属性,即将该属性移除。 --> <result column="dept_code" property="deptCode"/> </resultMap> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression=""/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </webservice>
<!-- id唯一 --> <!-- 此处websocket可以写多个 --> <websocket id="websocket-in"> <!--websocket连接配置--> <connect> <!--websocket连接地址,必填--> <url>ws://localhost:8080/</url> <!--websocket连接后发送消息给服务端,非必填,不填不发--> <!--<messageAfterOpen>test</messageAfterOpen>--> </connect> <!--name:任务名称 不能重复--> <task name="websocketTask"> <!--结果值映射--> <!--如果mqtt返回值是字符串,则不需要此映射设置,直接使用resultHandler处理。如果返回类型为json或者xml则使用此映射。--> <!--<resultMap> <result></result> </resultMap>--> <!--结果处理 非必填--> <!-- 结果处理器,可将resultMap中处理好的数据进行整体处理 expression:支持javascript表达式,可进行JS库函数调用。如果不处理结果,请注释掉resultHandler或者删除。 --> <!--<resultHandler expression="print(data)"/>--> <!-- data-out:将task中处理完的结果进行输出。其输出模块为定义在<dataOut></dataOut>节点中的模块。 非必填 --> <data-out> <!-- 可以写多个module节点 --> <!-- name:输出模块的模块名称 id:输出模块的id type:执行类型 before/after before:用于输出原始数据(未经过resultMap、resultHandler处理的数据) after:用于输出处理后的数据 --> <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。--> <!--数据库存储输出--> <!--调用taskName为saveDept的的任务进行科室数据存储--> <!--<module name="data-out-database" id="database-out"> <param name="taskName" value="saveDept"/> </module>--> <!--文件存储输出--> <!--<module name="data-out-file" id="file-out"/>--> <!--HTTP调用输出--> <!--<module name="data-out-http" id="http-out"/>--> <!--MQTT主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-mqtt" id="mqtt-out"> <param name="topic" value="test"/> </module>--> <!--RabbitMQ推送到队列输出--> <!--name:exchange为固定值,value根据情况填写--> <!--name:routingKey为固定值,value根据情况填写--> <!--<module name="data-out-rabbitmq" id="rabbitmq-out"> <param name="exchange" value="fengzx"/> <param name="routingKey" value="fengzx"/> </module>--> <!--redis主题发布输出--> <!--发布名称为test的主题 name值topic为固定值--> <!--<module name="data-out-redis" id="redis-out"> <param name="topic" value="test"/> </module>--> </data-out> </task> </websocket>
输入节点,可通过配置多个输入节点如http、mysql、sqlserver、oracle、webservice等,对数据进行采集。
模块节点是输入节点和输出节点的子节点。一个模块节点对应一个数据对接组件,模块节点不可重复,即相同模块名的节点只能有一个。
<!-- 输出节点配置 --> <dataOut> <!--数据库模块输出节点--> <module name="data-out-database"><!--此处是模块具体配置--></module> <!--数据库模块输出节点--> <module name="data-out-file"><!--此处是模块具体配置--></module> <!--HTTP模块输出节点--> <module name="data-out-http"><!--此处是模块具体配置--></module> <!--IBM WebSphere MQ模块输出节点--> <module name="data-out-ibmmq"><!--此处是模块具体配置--></module> <!--MQTT模块输出节点--> <module name="data-out-mqtt"><!--此处是模块具体配置--></module> <!--RabbitMq模块输出节点--> <module name="data-out-rabbitmq"><!--此处是模块具体配置--></module> <!--Redis模块输出节点--> <module name="data-out-redis"><!--此处是模块具体配置--></module> </dataOut>
模块节点 | 模块说明 | 子节点 |
---|---|---|
data-out-database | 数据库模块,支持MySQL、SqlServer、Oracle、SyBase,支持多数据源。支持将数据持久化到数据库。 | database |
data-out-file | 文件模块,支持将数据输出到文件。 | file |
data-out-http | HTTP模块,支持HTTP回调,将数据通过HTTP进行发送。 | http |
data-out-rabbitmq | RabbitMq模块,支持将数据发送到指定队列。 | rabbitmq |
data-out-mqtt | MQTT模块,支持将数据发布到指定主题。 | mqtt |
data-out-redis | Redis模块,支持将数据发布到指定主题。 | redis |
<!-- 关系型数据库对接方式比如mysql、oracle --> <!-- id必须唯一 --> <!-- 此处database可以写多个 --> <database id="database-out"> <!-- 数据库连接属性 --> <connect> <!-- 数据库JDBC连接地址 必填。url地址为标准的jdbc连接地址--> <url> jdbc:mysql://localhost:3306/swams?useUnicode=true&characterEncoding=utf8&useSSL=false </url> <!-- 数据库用户名 必填--> <username> root </username> <!-- 数据库密码 必填--> <password> 123456 </password> <!-- sql语句编译缓存 非必填。默认开启预编译--> <!--<cachePrepStmts> true </cachePrepStmts>--> <!-- sql语句编译缓存数 非必填。预编译默认缓存数为250--> <!--<prepStmtCacheSize> 250 </prepStmtCacheSize>--> <!-- 数据库编译缓存数限制 非必填。预编译默认限制为2048 --> <!--<prepStmtCacheSqlLimit> 2048 </prepStmtCacheSqlLimit>--> <!--等待来自池的连接的最大毫秒数 非必填。默认值为30000--> <!--<connectionTimeout> 30000 </connectionTimeout>--> <!--连接允许在池中闲置的最长时间 非必填。默认值600000--> <!-- <idleTimeout> 600000 </idleTimeout>--> <!--池中连接最长生命周期 非必填。默认值1800000--> <!--<maxLifetime> 1800000 </maxLifetime>--> <!--池中维护的最小空闲连接数 非必填。默认值10--> <!--<minimumIdle> 10 </minimumIdle>--> <!--池中最大连接数,包括闲置和使用中的连接 非必填。默认值10--> <!--<maximumPoolSize> 10 </maximumPoolSize>--> </connect> <!-- 一个sql一个task,可以写多个task --> <!-- task:配置任务 task属性: name:任务名称 --> <task name="saveDept"> <!-- sql支持freemarker语法进行渲染,如insert into test (name) values('') --> <!--sql必填--> <sql id="insertDept"> <!--<![CDATA[ insert into test (code,name) values <#list data as item> ('','')<#if item_has_next>, </#if> </#list> on duplicate key update name = values(name); ]]>--> </sql> </task> </database>
<!-- id唯一 --> <!-- 此处file可以写多个 --> <file id="file-out"> <config> <!-- 是否追加输出,默认false --> <append>false</append> <path>D:/测试区/</path> <!-- 支持文件名格式化 {yyyy}:年 {MM}:月 {dd}:日 {hh}:时 {mm}:分 {ss}秒 {rand}:4位随机数 ,且支持在filename里写"/",自动转为路径。 如 /资料/{yyyy}/{MM}/{dd}/{yyyy}{MM}{dd}{hh}{mm}{ss}.txt --> <filename>/资料/{yyyy}/{MM}/{dd}/{yyyy}{MM}{dd}{hh}{mm}{ss}.txt</filename> </config> </file>
<!-- id唯一 --> <!-- 此处http可以写多个 --> <http id="http-out"> <connect> <!--url:http请求地址 必填--> <url>http://localhost:8080</url> <!--http请求类型:post/get 不填默认post--> <!--<type>post</type>--> <!--http请求失败是否重试,默认不重试。-1:不断重试,0:不重试 1~n: 重试n次--> <!--<retry>0</retry>--> <!--http重试时间间隔,默认1000ms--> <!--<retry-time>1000</retry-time>--> <!--http请求超时时间,非必填。默认2000ms--> <!--<timeout>2000</timeout>--> <!--http请求内容类型,非必填。默认application/json--> <!--<content-type>application/json</content-type>--> <!--header:http请求头 非必填--> <!--<header> <item name=""></item> </header>--> </connect> </http>
<!-- id唯一 --> <!-- 此处mqtt可以写多个 --> <mqtt id="mqtt-out"> <connect> <!-- 主机地址 必填 --> <host>tcp://127.0.0.1:1883</host> <!-- 用户名 非必填--> <!--<username>bsj</username>--> <!-- 密码 非必填--> <!--<password>bsj123456</password>--> <!-- 重连时间间隔 非必填。默认5s--> <!--<reconnectTime>5</reconnectTime>--> <!-- 连接超时时间 非必填。默认不超时--> <!--<connectionTimeout>0</connectionTimeout>--> <!-- 心跳检测时间间隔 非必填。默认20s--> <!--<keepAliveInterval>20</keepAliveInterval>--> <!-- 自动重连 非必填。默认自动重连--> <!--<automaticReconnect>true</automaticReconnect>--> <!-- 是否清除session 非必填。默认清除session--> <!--<clearSession>true</clearSession>--> <!-- QOS服务质量 非必填。默认qos为1--> <!--<qos>1</qos>--> <!--maxInflight 非必填--> <!--<maxInflight>500</maxInflight>--> </connect> </mqtt>
<!-- id唯一 --> <!-- 此处rabbitmq可以写多个 --> <rabbitmq id="rabbitmq-out"> <connect> <!-- 主机地址 --> <host>127.0.0.1</host> <!-- 端口 非必填 默认端口为5672--> <!--<port>5672</port>--> <!-- 用户名 非必填--> <!--<username>guest</username>--> <!-- 密码 非必填--> <!--<password>guest</password>--> <!-- 虚拟主机 非必填--> <!--<virtualHost>/</virtualHost>--> <!--交换器名称 非必填--> <!--<exchange></exchange>--> <!--队列名 非必填--> <!--<queue></queue>--> <!--路由 非必填--> <!--<routingKey></routingKey>--> <!--交换器类型 非必填--> <!--<exchangeType></exchangeType>--> </connect> </rabbitmq>
<!-- id唯一 --> <!-- 此处redis可以写多个 --> <redis id="redis-out"> <!--redis连接配置--> <connect> <!--redis主机地址 必填--> <host>127.0.0.1</host> <!--redis端口,非必填,默认6379--> <!--<port>6379</port>--> <!--redis密码 非必填--> <!--<password>123456</password>--> <!--redis数据库索引 非必填默认0--> <!--<index>0</index>--> <!--redis连接超时时间 非必填 默认5000ms--> <!--<timeout>5000</timeout>--> <!-- redis最大空闲 非必填 默认10--> <!--<max-idle>10</max-idle>--> <!--redis最小空闲 非必填 默认1--> <!--<min-idle>1</min-idle>--> <!--redis 最大连接 非必填 默认20--> <!--<max-total>20</max-total>--> <!--redis最大等待时间 默认1000ms--> <!--<max-wait-millis>1000</max-wait-millis>--> </connect> </redis>
在结果映射处理(resultMap)和结果处理器(resultHandler)中均有属性expression,该属性支持js表达式也支持调用提前在项目中的lib中设定的js函数库。
示例1: expression = "2" //返回为数字2 示例2: expression = "'2'" //返回为字符串“2” 示例3: expression = "0.5" //返回浮点数0.5 示例4: expression = "6+9" //返回数字15 示例6: expression = "'6'+'9'" //返回字符串“69” 示例7: expression = "'123456789'.split(0,1)" //返回字符串“1” 示例8: expression = "[1,2,3,4][0]" //返回数字1 示例9: expression = "{'1':'壹','2':'贰'}['1']" //返回字符串“壹” //其他js中支持的表达式均可
支持在expression表达式中 直接调用js函数。函数定义在程序的lib目录下。如expression="print(data,rowData)",即调用lib/common.js中的print函数,输出data,和rowData值
系统默认自带了java.js(提供java访问库)、zhToPinYin.js(汉字转拼音支持库)、common.js(js扩展库)。如有需要增加函数,请在lib中自行新增js文件,并添加函数。不要修改自有函数库。
if (typeof (String.prototype.startWith) == 'undefined') { String.prototype.startWith = function (str) { if (str == null || str === "" || this.length === 0 || str.length > this.length) return false; return this.substr(0, str.length) === str; } } /*判断字符串是否是以str结尾的 */ if (typeof (String.prototype.endWith) == 'undefined') { String.prototype.endWith = function (str) { if (str == null || str === "" || this.length === 0 || str.length > this.length) return false; return this.substring(this.length - str.length) === str; } } /*字符串首尾去空格 */ if (typeof (String.prototype.trim) == 'undefined') { String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); } } /*在字符串末尾追加字符串 */ if (typeof (String.prototype.append) == 'undefined') { String.prototype.append = function (str) { return this.concat(str); } } /*字符串是否包含字符串 */ if (typeof (String.prototype.contains) == 'undefined') { String.prototype.contains = function (sub) { return this.indexOf(sub) !== -1; } } /*数组去重 */ if (typeof (Array.prototype.unique) == 'undefined') { Array.prototype.unique = function () { var temp = []; var length = this.length; for (var i = 0; i < length; i++) { if (temp.indexOf(this[i]) === -1) { temp.push(this[i]); } } return temp; } } /*数组包含元素 */ if (typeof (Array.prototype.contains) == 'undefined') { Array.prototype.contains = function (el) { var i; for (i = 0; i < this.length; i++) { if (this[i] === el) return true; } return false; } } /*数组去除元素返回数组 */ if (typeof (Array.prototype.removeArray) == 'undefined') { Array.prototype.removeArray = function (val) { var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); } }; } /*数组清空元素 */ if (typeof (Array.prototype.clear) == 'undefined') { Array.prototype.clear = function () { this.length = 0; } } /*日期格式化*/ if (typeof (Date.prototype.format) == 'undefined') { Date.prototype.format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "[Dd]+": this.getDate(), //日 "[Hh]+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "[Qq]+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/([Yy]+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } } /*日期转化*/ if (typeof (String.prototype.parseToDate) == 'undefined') { String.prototype.parseToDate = function () { var dateStr = this; var date = new Date(NaN); if (!!dateStr) { dateStr = dateStr.split(".")[0]; if (!!dateStr) { return new Date(dateStr.replace(/-/g, "/")); } else { return date; } } else { return date; } } } // 打印数据 function print(data) { for (var i = 0; i < arguments.length; i++) { Logger.info(arguments[i]); } return arguments[0] || ""; }
可以调用JAVA类,如expression = "System.out.println(data)",但System类需要提前在java.js中引入。
目前引入的JAVA类有java.lang.System、java.util.Date、com.h4kit.swams.dataincommon.util.DateUtil
如需自行引入其他java类,请自行新建js文件引入。
/** * 引入Java 类 * 提供了常用java类的引入,以及对一些java类的使用进行了包装 * 如果需要使用其他java类可自行新建js,进行扩展 * @author fengzx * @date 2020/8/26 16:32 */ var System = Java.type('java.lang.System'); //日志 var Logger = Java.type('com.h4kit.swams.dataincore.loger.Logger').LOGGER; //日期类 var JavaDate = Java.type('java.util.Date'); //日期工具类 var JavaDateUtil = Java.type('com.h4kit.swams.dataincommon.util.DateUtil'); //java 文件类 var File = Java.type("java.io.File"); //apache 文件处理类 var FileUtils = Java.type("org.apache.commons.io.FileUtils"); //字符串处理类 var StringUtils = Java.type("org.apache.commons.lang3.StringUtils"); //集合工具类 var Collections = Java.type("java.util.Collections"); //线程类 var Thread = Java.type("java.lang.Thread"); var Runnable = Java.type("java.lang.Runnable"); var ProcessThread = Java.type("com.h4kit.swams.dataincore.starter.ProcessStarter"); //常用数据类型 var JavaList = Java.type("java.util.ArrayList"); var JavaMap = Java.type("java.util.HashMap"); var JavaJson = Java.type("com.alibaba.fastjson.JSONObject"); var JavaJsonArray = Java.type("com.alibaba.fastjson.JSONArray"); /** * 自定义全局对象 * @author fengzx * @date 2020/8/26 16:32 */ var DataTransUtil = {}; //线程池 var JavaThreadPool = {}; //线程 var JavaThread = {}; //文件处理 var JavaFile = {}; /** * 日期转换 * @author fengzx * @date 2020/8/26 16:32 */ DataTransUtil.parseToDate = function (str, format) { return JavaDateUtil.strToDate(str, format); }; /** * 线程池执行 * @author fengzx * @date 2020/8/26 16:32 */ JavaThreadPool.execute = function (runFunction) { var MyRun = Java.extend(Runnable, { run: runFunction }); ProcessThread.POOL.execute(new MyRun()); }; /** * 线程执行 * @author fengzx * @date 2020/8/26 16:32 */ JavaThread.execute = function (runFunction) { var MyRun = Java.extend(Runnable, { run: runFunction }); new Thread(new MyRun()).start(); }; /** * 默认以utf-8形式读取文件 * @author fengzx * @date 2020/8/26 16:32 */ JavaFile.readFile = function (path, charset) { return FileUtils.readFileToString(new File(path), charset || "utf-8"); }; /** * 默认以utf-8形式写入文件 * @author fengzx * @date 2020/8/26 16:32 */ JavaFile.writeFile = function (content, path, charset, append) { FileUtils.writeStringToFile(new File(path), content, charset || "utf-8", !!append) }; /** * 根据路径强制删除文件 * @author fengzx * @date 2020/8/26 16:32 */ JavaFile.deleteFile = function (path) { FileUtils.forceDelete(new File(path)); }; /** * 根据路径强制删除目录 * @author fengzx * @date 2020/8/26 16:32 */ JavaFile.deleteDir = function (path) { FileUtils.deleteDirectory(new File(path)); }; /** * 根据路径创建目录 * @author fengzx * @date 2020/8/26 16:32 */ JavaFile.mkDir = function (path) { FileUtils.forceMkdir(new File(path)); }; /** * 根据路径遍历目录下所有文件 * @author fengzx * @date 2020/8/26 16:32 */ JavaFile.walk = function (path, callback, suffix) { suffix = suffix || null; var fileList = FileUtils.listFiles(new File(path), suffix, true); for (var i = 0; i < fileList.length; i++) { typeof callback === "function" && callback(fileList[i]); } };