赞
踩
目录
最近在研究开源的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行左右,修改如下:
- <!--注释配置项-->
- <!-- <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目录的内容如下:
通过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/,我期盼的页面出现了
输入用户名和密码之后,界面进度条动了起来,自己心情小激动了一下,终于可以看到下面的这个界面了。
附账号和密码:
角色 | 用户名 | 密码 |
系统管理员 | sysadmin@thingsboard.org | sysadmin |
租户管理员 | tenant@thingsboard.org | tenant |
这个是系统管理员进去的主界面:
感谢自己的耐心和坚持不懈,终于让项目成功的运行起来了。然后对后端项目有了一点点认知。一个后端项目要配置数据库的环境,还要配置开发环境,项目要编译打包,打包之后项目要启动服务,在启动之前,如果检查数据库是否需要插入测试数据(这个是否有这种类似数据检查的代码逻辑有关)等等。借着这个Thingsboard项目,正好把这些内容熟悉一下。加油!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。