配置mvn仓库及仓库存储位置
Github拉取或直接下载
git切换至稳定分支
Tags下载稳定版
IDEA必装插件
Protocol Buffers
Protocol Buffers(简称为ProtoBuf)是一种轻量级的数据交换格式,由Google开发。它通过定义结构化的消息格式,使得不同平台和语言之间可以方便地进行数据传输和解析。ProtoBuf使用 .proto
文件来定义消息的结构和字段。这些文件使用ProtoBuf语言(Protocol Buffers Language)编写,具有类似于C语言的语法。在.proto
文件中,我们可以定义消息的字段、嵌套消息、枚举类型等信息。ProtoBuf支持多种编程语言,包括Java、C++、Python等,每种语言都有相应的ProtoBuf编译器可以将.proto
文件编译为该语言的源代码文件。通过生成的源代码文件,我们可以在程序中使用强类型的对象来表示和操作消息,从而实现数据的序列化和反序列化。ProtoBuf在数据传输和存储方面有很多优势。首先,ProtoBuf的消息格式是紧凑的,占用的空间比传统的文本格式(如XML和JSON)更小。其次,ProtoBuf的解析速度非常快,因为生成的代码是经过高度优化的。此外,ProtoBuf还支持向后兼容和扩展性,可以在不破坏现有消息的情况下对消息进行更新和演化。总的来说,ProtoBuf是一种高效、灵活和跨平台的数据交换格式。它广泛应用于分布式系统、网络通信、存储和持久化等领域,提供了一种可靠且高效的方式来处理结构化数据。
- 处理TB中protocol文件的解析
Lombok
Lombok是一个用于Java开发的工具,旨在通过自动生成样板代码来简化Java类的开发。它能够消除大量重复性的代码,如getter、setter方法、equals、hashCode和toString方法等,从而提高开发效率并减少样板代码的编写量。使用Lombok,开发者只需通过注解方式添加一些简单的注解,就可以在编译时自动生成对应的方法和代码。这些注解会在编译时由Lombok注解处理器自动处理,并生成相应的代码,从而减少了手动编写样板代码的工作。以下是Lombok常用的注解以及其作用:- @Getter
/ @Setter
: 自动生成字段的getter和setter方法。- @ToString
: 自动生成toString
方法。- @EqualsAndHashCode
: 自动生成equals
和hashCode
方法。- @NoArgsConstructor
: 自动生成无参构造方法。- @AllArgsConstructor
: 自动生成包含所有参数的构造方法。- @Data
: 自动生成所有字段的getter、setter、toString
、equals
和hashCode
方法。- @Builder
: 自动生成Builder模式的代码,用于构建对象实例。除了上述注解外,Lombok还提供了其他一些注解,用于更精细地控制代码的生成行为。总的来说,Lombok极大地简化了Java类的开发过程,使得开发者可以更专注于业务逻辑的实现,而不必花费过多精力在编写样板代码上。因此,Lombok已经成为许多Java开发者常用的工具之一。
- 简化JAVA的POJO操作方法
maven编译打包代码(网络影响极大)
pom文件中msa屏蔽(如不考虑微服务架构代码)
注释pom文件中该内容
mvn clean install -DskipTests
mvn -T 0.8C clean install -DskipTests
这是一个Maven的命令,它用于清理、编译和打包项目。下面解释一下各个参数的含义:- mvn
:Maven的命令前缀。- -T 0.8C
:-T
参数用于启用并行构建,0.8C
表示使用0.8倍的CPU核心数,以及每个核心允许的最大并行线程数。这个值应该根据当前系统的配置来进行调整,以达到最优的构建效率。- clean
:清理项目,删除target
目录。- install
:安装构件到本地Maven仓库中,供其他Maven项目使用。- -DskipTests
:跳过测试阶段,不执行测试用例。综合起来,这个命令的作用是清理、编译和打包项目,并将构件安装到本地Maven仓库中,但不执行测试用例。通常在开发过程中,我们会频繁地执行此命令来检查代码是否能够成功编译和打包,以及构件是否能够被正确地安装到本地仓库中。
- 加速编译
注意:若某依赖包、前端组件等文件无法通过mvn直接安装至mvn本地仓库或ui,则手动下载此文件,并复制到指定文件路径下
- 若无法下载cglib-3.1.jar该依赖,则手动至mav中央仓库等仓库下载,并手动移至mvn本地仓库中
配置文件可抽取为conf,便于控制系统配置文件
thingsboard.conf
如:# DB Configurationexport DATABASE_ENTITIES_TYPE=sqlexport DATABASE_TS_TYPE=cassandra
数据库方面
db安装
- PostgreSQL必装
- 考虑安装Cassandra(Docker部署)
• Docker安装
• docker pull cassandra:latest
• docker network create cassandra
• docker run -d --name cassandra --network cassandra -p 9042:9042 -e CASSANDRA_USERNAME=cassandra -e CASSANDRA_PASSWORD=cassandra cassandra:latest
• docker logs -f --tail 500 cassandra
• docker rm -f cassandra
• 修改yml参数
• DATABASE_TS_TYPE
• DATABASE_TS_LATEST_TYPE
• CASSANDRA_USERNAME
• CASSANDRA_PASSWORD
• etc.
- 考虑安装Redis
• 手动\Docker安装(安装简单,略安装讲解)
• 修改yml参数
• CACHE_TYPE
• etc.
手动建库(PostgreSQL):tb3.5(自定义,需与yml中配置数据一致)
遥测方面
- 默认存储历史遥测值于pg(可修改yml配置)
- 默认存储最新遥测值于pg(可修改yml配置,同历史遥测值存于Cassandra)
系统参数缓存方面
- caffeine
Caffeine是一个基于Java的高性能缓存库,由Google开发。它旨在提供高速、可扩展和易于使用的缓存功能。Caffeine的设计思路是在高并发场景下提供快速、可靠的缓存服务。它具有以下特点:1. 快速:Caffeine使用了多种内存算法和数据结构来优化缓存的访问速度。例如,它使用了类似于LRU(最近最少使用)的算法来自动清理缓存中的过期数据,同时还支持手动清除和刷新缓存。2. 可扩展:Caffeine支持多种缓存配置选项,例如缓存大小、并发级别、过期策略等,可以根据不同的应用场景进行灵活配置。此外,Caffeine还支持异步加载和刷新缓存数据,以提高效率和并发性。3. 易于使用:Caffeine提供了简单易用的API,可以轻松地创建和管理缓存实例。开发者可以通过简单的方法调用来访问缓存数据,无需手动处理缓存的细节和复杂性。Caffeine的使用非常简单。首先,需要添加Caffeine库的依赖到项目中。然后,可以通过Caffeine的API来创建和管理缓存实例,并使用put、get等方法来读写缓存数据。以下是Caffeine常用的API方法:- Caffeine.newBuilder()
: 创建Caffeine实例的构造器。- maximumSize(long maximumSize)
: 指定缓存的最大大小。- expireAfterAccess(Duration duration)
: 指定在访问后过期的时间。- expireAfterWrite(Duration duration)
: 指定在写入后过期的时间。- refreshAfterWrite(Duration duration)
: 指定在写入后刷新的时间。- build()
: 构建缓存实例。- get(Object key, Function<? super K, ? extends V> mappingFunction)
: 获取指定键值的缓存数据,如果不存在则通过mappingFunction函数加载数据并将其放入缓存中。- put(K key, V value)
: 将指定的键值对放入缓存中。总的来说,Caffeine是一个高效、灵活和易于使用的缓存库,可以帮助Java开发者简化缓存的管理和配置。它的性能和可扩展性非常出色,已经被广泛应用于各种高并发场景下的应用中。
- redis
Redis是一个基于内存的开源数据存储系统,支持多种数据结构和操作,包括字符串、哈希表、列表、集合、有序集合等。Redis为应用程序提供了高性能、可扩展、高可用性的数据存储和缓存服务。Redis的主要特点如下:1. 内存存储:Redis将数据存储在内存中,因此具有极高的读写性能。同时,Redis还提供了持久化机制,可以将内存中的数据定期或实时地写入磁盘中,以保证数据的安全性。2. 多种数据结构:Redis支持多种数据结构和操作,例如字符串、哈希表、列表、集合、有序集合等。这些数据结构可以满足不同场景下的数据存储和处理需求。3. 高效的缓存服务:Redis可以作为高效的缓存服务使用,可以将常用的数据存储在内存中,以提高访问速度。同时,通过设置过期时间和LRU算法等机制,可以自动清理过期数据和释放内存空间。4. 支持事务和Lua脚本:Redis支持事务和Lua脚本,可以提供更复杂的数据处理逻辑和操作。5. 高可用性:Redis提供了多种高可用性方案,例如主从复制、哨兵模式、集群模式等,可以保证数据的可靠性和可用性。Redis的使用非常广泛,特别是在高并发和大数据量的场景下。它可以作为缓存服务、会话管理、消息队列等多种用途,为应用程序提供高效的数据存储和处理服务。以下是一些Redis的常用命令和操作:- SET key value
: 设置指定键的值。- GET key
: 获取指定键的值。- HSET key field value
: 设置哈希表中指定字段的值。- HGET key field
: 获取哈希表中指定字段的值。- LPUSH key value
: 将一个值插入列表头部。- LPOP key
: 移除并返回列表的第一个元素。- SADD key member
: 向集合中添加一个成员。- SMEMBERS key
: 返回集合中的所有成员。- ZADD key score member
: 向有序集合中添加一个成员。- ZRANGE key start stop
: 返回有序集合中指定区间的成员列表。- EXPIRE key seconds
: 为指定键设置过期时间。总的来说,Redis是一个非常强大和灵活的数据存储和缓存系统,可以满足各种不同的数据处理需求。它的高性能、可扩展性和高可用性使得它成为了许多应用程序中不可或缺的组成部分。
设备属性方面
- 默认存储于pg,可存储至Redis
注意:性能瓶颈为PostgreSQL,可基于此优化系统
代码编译
(加载数据)运行ThingsboardInstallApplication类
- 若IDEA无法启动,提示运行命令行过长
- 若报错:install.data_dir’ property value is not a valid directory!(则于yml新增参数)
• install: data_dir: ‘${INSTALL_DATA_DIR:D:\JAVA\others\3.5\thingsboard\application\src\main\data\lwm2m-registry}’
• 官方代码未做该参数默认值
- 初始化数据,需于yml新增参数
• install: load_demo: ‘${INSTALL_LOAD+DEMO:true}’
• 默认不加载默认数据
- 最终数据库表
(项目启动)运行ThingsboardServerApplication类
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
s78f-1715601015233)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!