2、开发环境搭建:JDK安装、PostgreSQL安装、ThingsBoard源码编译、本地启动
好,咱们正式开始动手了。
这一章,说白了就是「把家伙事儿备齐」。很多新手在 ThingsBoard 上栽跟头,不是代码写不对,而是环境没搭好。我见过太多人卡在 PostgreSQL 连不上、Maven 编译到一半报错,然后就开始怀疑人生。
别急,跟着我的节奏来。我把自己踩过的坑、绕过的路,都揉进这一章里。你照着做,基本一次过。
2.1 JDK 安装:版本选对,事半功倍
ThingsBoard 3.x 系列,官方推荐 JDK 11。我个人习惯用 OpenJDK 11,稳定、没版权问题。
⚠️ 注意: 别用 JDK 8,也别用 JDK 17 以上的版本。JDK 8 缺模块,JDK 17 有些 API 被删了,编译时会报错。我当初图新鲜试过 JDK 17,结果编译到一半卡在 java.xml.bind 包上,折腾了两小时才换回来。
安装步骤(Linux / macOS)
# 下载 OpenJDK 11
wget https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz
# 解压到 /usr/local
sudo tar -zxvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.11_9.tar.gz -C /usr/local/
# 配置环境变量
export JAVA_HOME=/usr/local/jdk-11.0.11+9
export PATH=$JAVA_HOME/bin:$PATH
安装步骤(Windows)
直接去 Adoptium 官网 下载 msi 安装包,一路下一步就行。安装完后记得配一下环境变量:
JAVA_HOME = C:\Program Files\Eclipse Adoptium\jdk-11.0.11.9-hotspot
PATH 里加上 %JAVA_HOME%\bin
验证一下:
java -version
# 输出类似:openjdk version "11.0.11" 2021-04-20
💡 我的小技巧: 我习惯在 ~/.bashrc 或 ~/.zshrc 里写死 JAVA_HOME,这样每次打开终端不用重新 export。你想想看,要是每次编译前都要敲一遍,多烦人。
2.2 PostgreSQL 安装:数据库是 ThingsBoard 的「胃」
ThingsBoard 用 PostgreSQL 存设备数据、用户信息、规则链配置。没有它,ThingsBoard 就是个空壳。
版本选择
官方推荐 PostgreSQL 12+。我用的是 14,目前跑了一年多,没出过问题。
安装(以 Ubuntu 为例)
# 添加官方源
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-14
# 启动服务
sudo systemctl start postgresql
sudo systemctl enable postgresql
创建数据库和用户
# 切换到 postgres 用户
sudo -i -u postgres
# 创建用户(密码自己记好)
createuser thingsboard -P
# 创建数据库
createdb thingsboard -O thingsboard
⚠️ 我曾经踩过的坑: 创建用户时忘了设密码,结果 ThingsBoard 启动时连不上数据库,报错信息又很模糊。后来查了半天才发现是认证方式不对。建议你创建用户时一定要加 -P 参数,手动输入密码。
验证一下:
psql -U thingsboard -d thingsboard -h localhost
# 输入密码后能进入 psql 命令行,就说明成功了
2.3 ThingsBoard 源码编译:Maven 是核心
源码编译,说白了就是用 Maven 把 Java 代码打包成可运行的 jar 包。这一步最考验耐心,因为 Maven 会下载一大堆依赖,网络不好就容易超时。
克隆源码
git clone https://github.com/thingsboard/thingsboard.git
cd thingsboard
我个人习惯切到最新的稳定版分支,比如 3.6.2:
git checkout release-3.6.2
编译命令
mvn clean install -DskipTests -Dnpm.skip=true
这里解释一下参数:
-DskipTests:跳过单元测试,节省时间。我第一次编译时没加这个参数,结果跑了半小时测试,还挂了几个,心态直接崩了。-Dnpm.skip=true:跳过前端 npm 构建。我们后面单独搞前端,这里先不管。
💡 避坑指南: 如果你在编译过程中遇到「下载依赖超时」或「SSL 证书错误」,八成是 Maven 镜像源的问题。我建议你修改 ~/.m2/settings.xml,加上阿里云镜像:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
编译成功后的产物
编译完成后,在 application/target 目录下会生成一个 thingsboard-3.6.2-boot.jar。这个就是我们要的东西。
2.4 本地启动:终于跑起来了
编译成功只是第一步,能启动才算真正搭好环境。
配置数据库连接
在 application/src/main/resources 目录下,找到 thingsboard.yml,修改数据库配置:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/thingsboard
username: thingsboard
password: 你刚才设的密码
driver-class-name: org.postgresql.Driver
启动命令
cd application/target
java -jar thingsboard-3.6.2-boot.jar
启动日志会刷刷刷地往上滚。看到类似这样的输出,就说明成功了:
2024-01-15 10:23:45.123 INFO 12345 --- [main] o.t.s.ThingsboardServerApplication : Started ThingsboardServerApplication in 45.789 seconds
🎉 启动成功后: 打开浏览器,访问 http://localhost:8080,就能看到 ThingsBoard 的登录页面了。默认账号是 sysadmin@thingsboard.org,密码是 sysadmin。
常见启动失败原因
| 错误现象 | 原因 | 解决办法 |
|---|---|---|
| 数据库连接失败 | PostgreSQL 没启动,或用户名密码不对 | 检查 PostgreSQL 服务状态,确认配置 |
| 端口被占用 | 8080 端口已被其他程序占用 | 用 lsof -i:8080 查看,杀掉占用进程 |
| 内存不足 | ThingsBoard 默认需要 2G 内存 | 启动时加 -Xmx1g 参数限制内存 |
⚠️ 最后提醒一句: 本地启动时,建议用
Ctrl+C 正常关闭,别直接关终端。否则数据库连接池可能没释放干净,下次启动会报错。我当初偷懒直接关窗口,结果数据库里残留了一堆死连接,重启了三次才恢复正常。
好了,环境搭好了,下一章我们开始真正写代码。你想想看,从零到能跑起一个 ThingsBoard 实例,是不是也没那么难?