目录
前言
必不可缺步骤
1.源码获取
2.安装运行环境
3.源码编译
4.将源码导入到IDEA
5.数据库安装
6.测试数据导入
总结
最近在研究开源的ThingsBoard相关源码的内容,作为一个移动端APP的开发者,第一次接触这种后端项目,真的是无从下手,只能根据网上的步骤一点点的进行操作,项目好不容易编译成功了、数据库也安装成功了,但是就是项目运行不起来。把自己遇到的问题在一些QQ群中咨询,可能是自己的问题比较低级,也没有人回复,在网上也没有找到立即对症下药的帖子,自己一遍又一遍的换关键字搜索,功夫不负有心人,终于可以让项目运行起来,顺便把我遇到的问题记录下,相比较与网上有一些比较好的博客,更适合像我这种从前端看后端项目的人,里面的有些步骤可能是在我看到的有些博客中没有提到的,但是属于必不可缺少的。当然也有些我目前也搞不明白的步骤,还希望大神给予指导。
这些步骤在运行这个项目的时候,对于之前的一个前端开发者来说,自己很容易忽略掉,现在把项目运行成功之后,才发现自己之前应该就多思考一下,细细想想都是些顺理成章的事情。
自行从Github上获取源码即可。git地址:https://github.com/thingsboard/thingsboard/
电脑的操作系统:MacOS Mojave,由于本地之前已经安装过Maven、JDK、Git、Nodejs、IDEA等,所以在编译过程中并没有因为这些没有安装报错信息,所以这里我不能提供一些因为这些环境而引起的报错信息,大家遇到一些因为这环境没有配置好而引起的问题可以自行搜索,有很多比较好的博客都有介绍。
这里我第一次编译的时候应该用的是这个命令,这个应该是直接进入到项目的根目录下执行的,然后第一次编译的时间是挺长的,但是编译肯定是成功的,因为我记得当时有看到Build Success的提示
xxxMacBook-Pro:thingsboard-master xxx$ mvn clean install -DskipTests
当然后来由于自己一直项目运行一直报“ org.thingsboard.server.dao.exception.IncorrectParameterException: Failed to date mail configuration. Settings not found!”这个错误,以为是哪里配置文件有问题,所以导致项目一直运行不起来。然后搜到一篇博客介绍修改一些thingsboard的一些配置文件,然后用下面的这个命令执行过,这次执行速度要很快,不知道跟我修改ingsboard/pom.xml的两个配置有没有关系,但是我修复运行的这个报错信息,肯定不是因为修改这个配置才可以运行成功。
xxxMacBook-Pro:thingsboard-master xxx$ mvn clean install -Dmaven.test.skip=true
修改的tthingsboard/pom.xml的配置项如下:
(1)注释 thingsboard/pom.xml文件中有关liscense的配置信息,直接搜索"com.mycila"就可以找到下面的内容,大约在thingsboard/pom.xml文件的694行左右,修改如下:
.....
(2)配置application\target\generated-sources\protobuf代码自动生成 ,还是在 thingsboard/pom.xml这个文件中搜索即可 ,大约在653行左右
至于为什么去修改这两个配置我也不是很清楚,但是我觉得我之前项目就能编译成功,修改这两个配置文件还是可以编译成功,但并不是我后面能够成功运行项目的关键因素。编译成功之后的运行界面如下:
打包编译成功之后,就可以看到在application\target目录的内容如下:
通过Maven工程的方式,将源码导入到IDEA中,这里不再多余介绍,我觉得对于一个不管是移动前端开发还是后端开发,这里应该不是问题。
从这里开始就是一个APP开发人员的噩梦了,这个地方我也是花了一段时间才搞明白,这个具体的内容可以参照我的另外一篇博文小白级别的thingsboard数据库安装。
注意经过将数据库安装好了之后,创建好thingsboard数据库的所有表之后,还要将项目中的内容配置进行修改下,在application/src/main/resources/thingsboard.yml这个文件里,找到下面的内容,将默认的数据库名postgres改为thingsboard。
datasource:
driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"
username: "${SPRING_DATASOURCE_USERNAME:postgres}"
password: "${SPRING_DATASOURCE_PASSWORD:*****}"
hikari:
maximumPoolSize: "${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:5}"
这个是一个很关键的步骤,我觉得对于我这个新手来说,这个步骤给忽略了,如果没有在做这个步骤,在运行ThingsboardServerApplication这个类,启动服务的时候,会一直抛出“org.thingsboard.server.dao.exception.IncorrectParameterException: Failed to date mail configuration. Settings not found!”这个异常,报错信息如下:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-07-16 09:47:23,242 [main] ERROR o.s.boot.SpringApplication - Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:156)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
at org.thingsboard.server.ThingsboardServerApplication.main(ThingsboardServerApplication.java:38)
。。。。。。。
。。。。。。。
Caused by: org.thingsboard.server.dao.exception.IncorrectParameterException: Failed to date mail configuration. Settings not found!
at org.thingsboard.server.service.mail.DefaultMailService.updateMailConfiguration(DefaultMailService.java:80)
at org.thingsboard.server.service.mail.DefaultMailService.init(DefaultMailService.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
... 102 common frames omitted
Process finished with exit code 1
刚开始的时候我也能感觉到是由于这个email没有配置引起的,我也之前也想到在步骤5中创建的数据库的内容是空的,但是一开始就是没有反应过来,后来我找到DefaultMailService这个类,把这个抛出异常的地方给隐藏,项目运行起来了,小窃喜了一分钟,继而就输入用户名和密码,在提示“Authorization fails”时候,我突然恍然大悟,都没有忘数据库里插入数据,即使输入给定的这个账号和密码,又怎么能去验证成功呢?所以就去寻找各种方式来解决这个怎么将测试数据插入到数据库中。下面就是导入测试数据的具体步骤:
(1)通过命令终端进入到application/target/bin/install目录下,里面有下面几个文件,直接执行install_dev_db.sh
(2)会发现报错“Permission denied”
(3)修改文件权限“chmod +x install_dev_db.sh”
(4)在重复(1)步骤,结果错误信息如下:
Logging system failed to initialize using configuration from 'logback.xml'
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[fileLogAppender] - Failed to create parent directories for [/var/log/thingsboard/install.log]
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[fileLogAppender] - openFile(/var/log/thingsboard/install.log,true) call failed. java.io.FileNotFoundException: /var/log/thingsboard/install.log (No such file or directory)
at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:169)
。。。。。。
。。。。。。
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:597)
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[fileLogAppender] - Failed to create parent directories for [/var/log/thingsboard/install.log]
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[fileLogAppender] - openFile(/var/log/thingsboard/install.log,true) call failed. java.io.FileNotFoundException: /var/log/thingsboard/install.log (No such file or directory)
ThingsBoard DB installation failed!
这种方式是由于要在系统的var/log下面创建文件夹,需要输入系统密码,所以我抱着试试的态度,直接进入到var/log创建了一个thingsboard的目录,然后在重复(1)步骤,神奇的事情发生了,页面出现了:
MacBook-Pro:install xx$ install_dev_db.sh
===================================================
:: ThingsBoard :: (v3.0.1-SNAPSHOT)
===================================================
Starting ThingsBoard Installation...
Installing DataBase schema for entities...
Installing SQL DataBase schema part: schema-entities.sql
Installing SQL DataBase schema indexes part: schema-entities-idx.sql
Installing DataBase schema for timeseries...
Installing SQL DataBase schema part: schema-ts-psql.sql
Failed to execute query: CREATE TABLE IF NOT EXISTS ts_kv_indefinite PARTITION OF ts_kv DEFAULT; due to: ERROR: "ts_kv" is not partitioned
Loading system data...
Loading demo data...
Installation finished successfully!
ThingsBoard DB installed successfully!
此处要为自己鼓掌一分钟。。。。。步骤6真的搞了我一天,然后正是因为步骤6,我在浏览器里在输入http://localhost:8080/,我期盼的页面出现了
输入用户名和密码之后,界面进度条动了起来,自己心情小激动了一下,终于可以看到下面的这个界面了。
附账号和密码:
角色 | 用户名 | 密码 |
系统管理员 | [email protected] | sysadmin |
租户管理员 | [email protected] | tenant |
这个是系统管理员进去的主界面:
感谢自己的耐心和坚持不懈,终于让项目成功的运行起来了。然后对后端项目有了一点点认知。一个后端项目要配置数据库的环境,还要配置开发环境,项目要编译打包,打包之后项目要启动服务,在启动之前,如果检查数据库是否需要插入测试数据(这个是否有这种类似数据检查的代码逻辑有关)等等。借着这个Thingsboard项目,正好把这些内容熟悉一下。加油!!!