Thingsboard从配置到运行成功小白级别的步骤以及踩过的坑

目录

前言

必不可缺步骤

1.源码获取

2.安装运行环境

3.源码编译

4.将源码导入到IDEA

5.数据库安装

6.测试数据导入

总结


前言

最近在研究开源的ThingsBoard相关源码的内容,作为一个移动端APP的开发者,第一次接触这种后端项目,真的是无从下手,只能根据网上的步骤一点点的进行操作,项目好不容易编译成功了、数据库也安装成功了,但是就是项目运行不起来。把自己遇到的问题在一些QQ群中咨询,可能是自己的问题比较低级,也没有人回复,在网上也没有找到立即对症下药的帖子,自己一遍又一遍的换关键字搜索,功夫不负有心人,终于可以让项目运行起来,顺便把我遇到的问题记录下,相比较与网上有一些比较好的博客,更适合像我这种从前端看后端项目的人,里面的有些步骤可能是在我看到的有些博客中没有提到的,但是属于必不可缺少的。当然也有些我目前也搞不明白的步骤,还希望大神给予指导。

必不可缺步骤

这些步骤在运行这个项目的时候,对于之前的一个前端开发者来说,自己很容易忽略掉,现在把项目运行成功之后,才发现自己之前应该就多思考一下,细细想想都是些顺理成章的事情。

1.源码获取

自行从Github上获取源码即可。git地址:https://github.com/thingsboard/thingsboard/

2.安装运行环境

电脑的操作系统:MacOS Mojave,由于本地之前已经安装过Maven、JDK、Git、Nodejs、IDEA等,所以在编译过程中并没有因为这些没有安装报错信息,所以这里我不能提供一些因为这些环境而引起的报错信息,大家遇到一些因为这环境没有配置好而引起的问题可以自行搜索,有很多比较好的博客都有介绍。

3.源码编译

这里我第一次编译的时候应该用的是这个命令,这个应该是直接进入到项目的根目录下执行的,然后第一次编译的时间是挺长的,但是编译肯定是成功的,因为我记得当时有看到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行左右,修改如下:

<!--注释配置项-->
               <!-- <plugin>
                    <groupId>com.mycila</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>3.0</version>
                    <configuration>
                        <header>${main.dir}/license-header-template.txt</header>
                        <properties>
                            <owner>The Thingsboard Authors</owner>
                        </properties>
                        <excludes>
                            <exclude>**/.env</exclude>
                            <exclude>**/*.env</exclude>
                            <exclude>**/.eslintrc</exclude>
                            <exclude>**/.babelrc</exclude>
                            <exclude>**/.jshintrc</exclude>
                            <exclude>**/.gradle/**</exclude>
                            <exclude>**/nightwatch</exclude>
                            <exclude>**/README</exclude>
                            <exclude>**/LICENSE</exclude>
                            <exclude>**/banner.txt</exclude>
                            <exclude>node_modules/**</exclude>
                            <exclude>**/*.properties</exclude>
                            <exclude>src/test/resources/**</exclude>
                            <exclude>src/vendor/**</exclude>
                            <exclude>src/font/**</exclude>
                            <exclude>src/sh/**</exclude>
                            <exclude>packaging/*/scripts/control/**</exclude>
                            <exclude>packaging/*/scripts/windows/**</exclude>
                            <exclude>packaging/*/scripts/init/**</exclude>
                            <exclude>**/*.log</exclude>
                            <exclude>**/*.current</exclude>
                            <exclude>.instance_id</exclude>
                            <exclude>src/main/scripts/control/**</exclude>
                            <exclude>src/main/scripts/windows/**</exclude>
                            <exclude>src/main/resources/public/static/rulenode/**</exclude>
                            <exclude>**/*.proto.js</exclude>
                            <exclude>docker/haproxy/**</exclude>
                            <exclude>docker/tb-node/**</exclude>
                            <exclude>ui/**</exclude>
                            <exclude>src/browserslist</exclude>
                            <exclude>**/*.raw</exclude>
                        </excludes>
                        <mapping>
                            <proto>JAVADOC_STYLE</proto>
                            <cql>DOUBLEDASHES_STYLE</cql>
                            <scss>JAVADOC_STYLE</scss>
                            <jsx>SLASHSTAR_STYLE</jsx>
                            <tsx>SLASHSTAR_STYLE</tsx>
                            <conf>SCRIPT_STYLE</conf>
                            <gradle>JAVADOC_STYLE</gradle>
                        </mapping>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>-->
.....
<!--紧跟着上面的这个就是这个隐藏信息-->
<!--        <plugins>
            <plugin>
                <groupId>com.mycila</groupId>
                <artifactId>license-maven-plugin</artifactId>
            </plugin>
        </plugins>-->

(2)配置application\target\generated-sources\protobuf代码自动生成 ,还是在 thingsboard/pom.xml这个文件中搜索即可 ,大约在653行左右

                 <configuration>
                                <sources>
                                    <source>${basedir}/target/generated-sources</source>

                                <!--配置application\target\generated-sources\protobuf代码自动生成-->
                                <!-- source>${basedir}/target/generated-sources</source -->
                                <source>${basedir}/target/generated-sources/grpc-java</source>
                                <source>${basedir}/target/generated-sources/java</source>
                                </sources>
                            </configuration>

至于为什么去修改这两个配置我也不是很清楚,但是我觉得我之前项目就能编译成功,修改这两个配置文件还是可以编译成功,但并不是我后面能够成功运行项目的关键因素。编译成功之后的运行界面如下:

打包编译成功之后,就可以看到在application\target目录的内容如下:

4.将源码导入到IDEA

通过Maven工程的方式,将源码导入到IDEA中,这里不再多余介绍,我觉得对于一个不管是移动前端开发还是后端开发,这里应该不是问题。

5.数据库安装

从这里开始就是一个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}"

6.测试数据导入

这个是一个很关键的步骤,我觉得对于我这个新手来说,这个步骤给忽略了,如果没有在做这个步骤,在运行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项目,正好把这些内容熟悉一下。加油!!!

猜你喜欢

转载自blog.csdn.net/nihaomabmt/article/details/107385241