1、概述
大家好,我又更新干货了,还是那句话,我绝不分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享ThingsBoard如何自定义规则节点,而且是万能查询节点,这是本人经过多次研究搞出来的,这个节点有什么特别之处呢?这个节点几乎可以代替其他节点,几乎满足你所有业务的查询,俗称万金油节点。我为什么说没有什么业务不能使用规则链实现呢?这个节点就占了很大的作用。
2、实现
2.1、下面官方的包结构
下载官方的自定义规则节点的下面,然后修改文件夹名字为你需要自定义的节点名字,如下图:
然后使用IDEA打开工程,修改POM的artifactId
2.2、自定义节点
工程结构如下图:
为什么要创建org.thingsboard.server.util呢?
因为thingsboard项目启动类扫描了org.thingsboard.server,我们自定义的SpringContextUtil需要被spring管理,需要初始化加载容器的bean。只要我们需要自定义节点,就需要获取dao-api下面定义的service类,如果默认的TbContext没有加载进去,我们都需要使用SpringContextUtil来动态创建bean对象,从而实现对当前service类下面方法的调用,下面给出了dao-api的所有service类定义。
定义EntityQueryNode类
/** * Copyright © 2018 The Thingsboard Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.thingsboard.rule.engine.node.entityquery; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; impor