当前位置: 首页 > news >正文

业务提前初始化执行

一 实现  CommandLineRunner接口

package com.example.gatewayacquisitionsystem;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.gatewayacquisitionsystem.config.ConfigProperties;
import lombok.Data;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

@Component
public class DeviceStatusRunner implements CommandLineRunner {

    @Resource
    RestTemplate restTemplate;
    @Resource
    ConfigProperties configProperties;

    public static int deviceNum = 0;
    public static int activeDeviceNum = 0;

    @Override
    public void run(String... args) throws Exception {

        ScheduledExecutorService service = Executors.newScheduledThreadPool(1);

        service.scheduleWithFixedDelay(new Runnable() {
            @Override
            public void run() {
                JSONObject jsonObject = restTemplate.getForObject(configProperties.getZDataHandleHost() + "gateway/onlineId", JSONObject.class);
                assert jsonObject != null;
                if (jsonObject.getInteger("code") != 200) {
                    return;
                }
                JSONArray gatewayIds = jsonObject.getJSONArray("data");
                int deviceNum = 0;
                int activeNum = 0;
                for (Object id : gatewayIds) {
                    JSONObject rep = restTemplate.getForObject(configProperties.getZDataHandleHost() + "gateway/status/" + id, JSONObject.class);
                    if (rep.getInteger("code") == 200) {
                        deviceNum += rep.getJSONObject("data").getInteger("deviceNum");
                        activeNum += rep.getJSONObject("data").getInteger("activeDeviceNum");
                    }
                }
                DeviceStatusRunner.deviceNum = deviceNum;
                DeviceStatusRunner.activeDeviceNum = activeNum;
            }
        }, 10, 10, TimeUnit.SECONDS);
    }
}

二 不影响主线程,使用断言关键字进行判断  assert

   代码在上面,查看


                

相关文章:

  • 区块链——Hyperledger Fabric2.2单点搭建网络
  • 从零开发一款图片编辑器Mitu-Dooring
  • 2022-08-30 第六小组 瞒春 学习笔记
  • 记录k8s-Calico网络插件报错问题
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[25]以太坊-智能合约-5
  • 技术对接36
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • 【编程强训11】最近公共祖先+求最大连续bit数
  • 走进Redis之配置文件的修改使用
  • java基于springboot+vue的园区入驻停车管理系统
  • 踩坑篇-Nacos+Sping-gateway+shiro实现分布式认证权限框架
  • SSM美众针纺有限公司人事管理毕业设计-附源码051708
  • 超详细的VsCode创建SpringBoot项目(图文并茂)
  • Python、设计原则和设计模式-对象行为类设计模式(一)
  • 利用Hugging Face中的模型进行句子相似性实践
  • CEF与代理
  • eclipse(luna)创建web工程
  • es6
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • k8s 面向应用开发者的基础命令
  • Linux下的乱码问题
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • OSS Web直传 (文件图片)
  • Promise面试题2实现异步串行执行
  • Python进阶细节
  • Spring核心 Bean的高级装配
  • Spring框架之我见(三)——IOC、AOP
  • 大整数乘法-表格法
  • 力扣(LeetCode)21
  • 判断客户端类型,Android,iOS,PC
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序开发中的那些坑
  • 以太坊客户端Geth命令参数详解
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • # Apache SeaTunnel 究竟是什么?
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $.proxy和$.extend
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (C语言)二分查找 超详细
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (转)Sublime Text3配置Lua运行环境
  • (转)程序员技术练级攻略
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • **python多态
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net面试题4
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ C++ ] STL---string类的模拟实现
  • [2544]最短路 (两种算法)(HDU)
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [ARM]ldr 和 adr 伪指令的区别
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [CentOs7]图形界面