11-物联网开发终端管理篇-java从MQTT获取设备数据,并通过Druid连接池把数据写入MySQL数据库(Linux系统,宝塔)

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/iot_terminal_management" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

 

说明

这一节是使用 java 连接 MQTT 服务器, 然后订阅主题获取所有设备数据,

然后通过 Druid 连接池把数据写入 MySQL 数据库.

注: java 连接 MQTT 和 Android 连接 MQTT 是一样的.

java 使用 Druid 连接池连接数据库可参考提供的 MySQL 基础开源教程.

java 代码使用 IntelliJ IDEA 软件打开.

 

新建数据库和表格

1, 新建数据库, 数据库名字 historical_data, 编码格式 utf8

 

 

2, 正常情况下, 用户在服务器上可以点击这个来操作数据库 (咱不使用这个, 咱使用下面的 navicat)

 

 

 

 

3, 在自己的电脑上使用 Navicat 连接数据库

 

 

 

 

4, 新建表格

 

 

5, 添加几个字段

字段 id,  类型是 int, 去掉允许空值, 设置为自增,  然后设置为主键;

字段 data_time,  类型设置为 timestamp;(作为数据存储的时间)

字段 client_id,  类型设置为 varchar;(记录设备的 id)

字段 temperature,  类型设置为 float;(存温度数据)

字段 humidity,  类型设置为 float;(存湿度数据)

 

 

 

5, 点击保存 表格名字为 humiture_table

 

 

可以打开表看下, 现在是没有数据

 

 

 

测试

1, 使用 IntelliJ IDEA 打开这节的工程

 

 

 

 

 

2, 源码需要使用 JDK1.8 及其以上版本

如果版本小于 1.8 则需要安装 (只需要安装, 不需要配置环境变量)

 

 

 

安装完以后不需要配置环境变量, 只需要在软件中设置 JDK 路径

 

 

 

 

 

2, 修改为自己的数据库信息和 MQTT 服务器信息

 

 

3, 根据自己的设备数据修改解析格式

如果设备的数据格式和我的不一样, 用户根据自己的数据格式修改

我的设备上报数据的格式是 {"data":"sensor","type":"th","temperature":45,"humidity":23}

 

 

4, 启动

 

5, 可以在控制台看到监控的所有设备的数据

 

 

6, 打开数据库表格

 

生成可执行 jar 包, 并安装运行到服务器

1, 停止运行

 

2, 因为程序已经设置过生成 jar 包, 所以用户直接按照下面操作即可生成可执行 jar 包.

 

 

3, 补充一下实际生成 jar 包的流程 (用户不需要操作)

 

 

 

 

 

4, 生成的 jar 包的位置

 

5, 一般宝塔都已经安装了 java 虚拟机, 可以随便找个目录点击上面的终端

输入 java -version

 

 

 

 

 

6, 提示

软件需要 1.8 版本及其以上的 JDK 运行, 如果已经安装了别的 JDK 版本,

可以再安装个 1.8 版本的, 不需要配置环境变量,后面有说明怎么指定 JDK 运行. 记得往后看哈!

 

7, 把生成的 jar 包放到服务器上

我放到了 opt 目录, 根据自己的习惯随意

 

 

8, 点击上面的终端并进入 opt 目录

 

 

 

9, 终端输入 java -jar MqttDataToMySQL.jar 命令启动程序

如果要指定 JDK 路径运行    / 你的 JDK 文件目录 /bin/java -jar MqttDataToMySQL.jar

 

 

10, 打印所有设备的数据, 说明已经运行起来了

 

 

让程序在后台运行

1, 在终端里面按下键盘的 Ctrl+C 组合键退出程序

 

 

2, 输入   nohup java -jar MqttDataToMySQL.jar &

如果要指定 JDK 路径运行   nohup / 你的 JDK 文件目录 /bin/java -jar MqttDataToMySQL.jar &

 

 

 

3, 程序已经运行,3073 为程序运行的 PID 值; 并生成了日志文件 nohup.out

 

 

4, 把这个控制台关闭

 

 

5, 点击刷新一下就可以看到日志文件

6. 如何关闭程序

先查看程序的进程 PID, ps aux|grep MqttDataToMySQL.jar

 

 

输入  kill -9 3073   关闭程序

 

 

 

程序说明

1. 整个源码就两部分,MQTT 和数据库

MQTT 使用的是 paho.client.mattv3-1.2.0 的 jar 包

数据库除了基本的 jabc 连接器以外, 使用了阿里巴巴的开源连接池 druid

 

 

2. 初始化连接池和连接 MQTT

 

 

3. 连接池配置

 

 

4. 连接 MQTT, 订阅主题

 

 

5. 获取 MQTT 数据, 从连接池获取链接对象, 把数据写到数据库

 

 

注意事项 1

1, 正常情况下 java 软件也是放到服务器上的, 所以 MQTT 连接地址应该写为

tcp://localhost:1883

 

 

2, 使用 localhost 连接 MQTT 服务器, 获取 MQTT 设备的所有数据可以直接订阅 #

 

 

3, 同样的数据库连接地址也改为 localhost , 数据库用户名和密码应该改为 root 的

 

 

修改完成以后, 重新生成 jar 包, 然后放到服务器上即可

 

注意事项 2

常理来讲测试完毕之后需要禁止别的电脑远程直接来访问数据库

可以把测试账号设置为本机访问