数据对接组件1.0

数据对接组件能够将系统解耦,将传统需要写在应用系统中的对接代码进行可配置化。

目前对接接入节点支持数据库(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

数据库模块

<!-- 关系型数据库对接方式比如mysqloraclesqlserversybase -->
<!-- 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表达式值转换,比如将性别01转成男,女可以这么写: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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</database>

HTTP模块

<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表达式值转换,比如将性别01转成男,女可以这么写: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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</http>

IBM WebSphere MQ模块

<!-- 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表达式值转换,比如将性别01转成男,女可以这么写: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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</ibmmq>

MQTT模块

<!-- 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服务质量 非必填。默认qos1-->
        <!--<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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</mqtt>

RabbitMQ模块

<!-- 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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</rabbitmq>

Redis

<!-- 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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</redis>

SocketIO模块

<!-- 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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</socketio>

WebService模块

<!-- 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表达式值转换,比如将性别01转成男,女可以这么写: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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<module name="data-out-redis" id="redis-out">
                <param name="topic" value="test"/>
            </module>-->

        </data-out>
    </task>
</webservice>

WebSocket模块

<!-- 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:用于输出原始数据(未经过resultMapresultHandler处理的数据) after:用于输出处理后的数据
            -->

            <!--当前支持6种模块输出方式,data-out中支持多个模块并行输出。-->

            <!--数据库存储输出-->
            <!--调用taskNamesaveDept的的任务进行科室数据存储-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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的主题 nametopic为固定值-->
            <!--<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

数据库模块

<!-- 关系型数据库对接方式比如mysqloracle -->
<!-- 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>

HTTP模块

<!-- 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>

MQTT模块

<!-- 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服务质量 非必填。默认qos1-->
        <!--<qos>1</qos>-->
        <!--maxInflight 非必填-->
        <!--<maxInflight>500</maxInflight>-->
    </connect>
</mqtt>

RabbitMq模块

<!-- 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>

Redis模块

<!-- 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>

JS函数库

在结果映射处理(resultMap)和结果处理器(resultHandler)中均有属性expression,该属性支持js表达式也支持调用提前在项目中的lib中设定的js函数库。

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中支持的表达式均可

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函数库调用

可以调用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]);
    }
};