文章目录
- 前言
- 简介
- 官网与源码下载地址
- 准备工作
-
- 1.下载
- 2. 数据库准备
- 发行版的配置与启动
-
- 1. 修改 bootstrap.yml
- 2. 修改 start.bat
- 3. 启动与访问
- 源码的配置与启动
-
- 1. IDEA 导入项目
- 2. 后端启动
- 2. 前端启动
- 我所踩过的坑
-
- 1. 除 mysql 之外的驱动问题
- 2. 请求超时问题
- 3. 空值导致的空指针异常
- 4. 表字段长度不够
- 5. 导出文件失败
- 总结
前言
项目里面需要用到这个 AJ-Reprot 生成动态的大屏报表,这两天也研究了下,觉得是个挺不错的开源项目,遂即整理一下以作分享。
不多说,初学者最懂初学者
简介
在线体验:https://report.anji-plus.com/index.html
体验账号:guest
密码:guest
官方文档是这么介绍的:
- AJ-Report是一个完全开源的BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。
- 多数据源支持,内置mysql、elasticsearch、kudu等多种驱动,支持自定义数据集省去数据接口开发,目前已支持20种大屏组件/图表,不会开发,照着设计稿也可以制作大屏。
- 三步轻松完成大屏设计:配置数据源---->写SQL配置数据集---->拖拽配置大屏---->保存发布。
按我的说法解释就是你可以用这个开源的项目,在这上面配好数据,写好 sql(数据集),就能够直接设计报表,并且能够动态的预览报表,并且支持导出。
以上我就直接 copy 官方文档所介绍的了,文档地址下面我也有提供,建议先看看官方文档,已经很详细了 ~~
官网与源码下载地址
gitee 下载:https://gitee.com/anji-plus/report/releases
官方文档:http://192.168.98.2:14000/
准备工作
1.下载
根据上面提供的 gitee 下载 链接进去下载就完事
呈现在最上面的就是最新版本的,旧版本往下拉就可以找到,这边下载有三个,简单介绍一下:
aj-report-xxxx.zip
这个是发行版,windows 下载之后改下配置可以直接运行 .bat 文件启动Source code (zip)
如果你想在 windows 下看源码或者启动就下载这个Source code (tar.gz)
如果你想直接在 linux 下运行就下载这个
linux 上的我就不做示范了,我就下载前两个玩玩
下载发行版和源码之后解压
2. 数据库准备
首先你总得有个数据库对吧,如果你没有数据库的话,以下我也提供一个本地 mysql 数据给大家学习(有的话恭喜你可以跳过这一步)
windows 下 mysql-5.7.17.msi 的安装包下载
链接:百度网盘地址
提取码:5lxo
这个安装步骤就不赘述了,基本上就是傻瓜式安装了
发行版的配置与启动
如果你是作为开发人员,启不动启动这个发行版都没关系,反正学习还得用到源码,它就是能够让你更好更快速的了解 AJ-Report,这里为什么我会加上这个,因为有些大数据的工作者可能没必要看源码,用这个发行版的玩玩,熟悉下。
双击进入该目录
1. 修改 bootstrap.yml
首先需要来到配置文件目录 conf
下修改 bootstrap.yml
文件的配置(建议自己看下该配置文件,开发人员很多配置都很良心的加上了注释)
这里要修改的地方就是数据库的配置了,改成你自己的,保存
注意
:
- aj_report库是存放底层基础信息的库,flyway启动时会自动建立,如果你在这里修改了库,将会出错
- 请确认你的Mysql是否支持远程连接,登陆用户是否有DDL权限
2. 修改 start.bat
再修改 bin
目录下的 start.bat ,以文本的形式开打编辑
把这个 rem 注释给删掉,配上你自己 jdk 的配置
如何查看 JDK 的配置?
此电脑 -> 鼠标右键选择 “属性” -> 高级系统设置 -> 高级-环境变量 -> 系统变量 - java_home
所以我这里就是
将 rem set JAVA_HOME=D:\App\Java\jdk1.8.0_172
改成 set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_172
注意
:如果你JAVA_HOME 的配置存在空格,则还需要将最下面 JAVA_HOME 加上 " "
号
3. 启动与访问
双击 bin
目录下的 start.bat
文件直接启动即可
并且可以看到启动后会直接往你的数据库中增加 aj_report
和 aj_report_init
两个 database
启动完之后就可以直接本地访问,至于这里面的功能,自己多点点就明白了,发行版不做详解 ~~
地址:http://localhost:9095
账号:admin
密码:123456
源码的配置与启动
1. IDEA 导入项目
导入之后是这样的
其中 report-core
是后端代码,report-ui
是前端代码
2. 后端启动
这个项目是用 springboot 搭建,所以后可以直接去运行启动类,但是前提是需要配置下 bootstrap.yml
文件
可以把这三个 bootstrap 文件的数据库都改成你所使用的数据库
比如说我本地的数据库,就这样改了:
datasource:
url: jdbc:mysql://localhost:3306/aj_report?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: root
运行启动类:
启动成功:
并且可以看到启动后会直接往你的数据库中增加 aj_report
和 aj_report_init
两个 database
2. 前端启动
前端的启用需要用到 node
,如果你没有下载 node,以下我也提供了我目前正在使用 node,安装也是傻瓜式安装,不做赘述了。
windows 下 node-v14.16.0-x64.msi 的安装包下载
链接:百度网盘地址
提取码:knw5
前端启动不管你用 webstorm 还是 visual studio code 或者是其它前端工具也好,都差不多,我这里就不那么麻烦了,也用 IDEA 启动算了
点击下面的 Terminal
依次输入以下三条命令:
cd report-ui
: 刚进入应该是在 report-Vxxx 下,cd 进入 report-ui
npm install
: 安装前端所需要的依赖包
npm run dev
:运行前端
看到这样子就表示你前端也启动成功了
访问地址:http://localhost:9528
账号:admin
密码:123456
我所踩过的坑
以上的安装启动都是常规,一般看着官方文档都能做到,关键是使用之后所遇到的问题,官方文档中可就没有了,以下我就梳理了我在使用的时候遇见的问题以及处理的方式。
1. 除 mysql 之外的驱动问题
在报表设计中,我们可以配置不同的数据源
不同的数据源有不同的驱动类,比如 mysql 的驱动类是 com.mysql.cj.jdbc.Driver
,mssqlserver 的驱动类是 com.microsoft.sqlserver.jdbc.SQLServerDriver
,在后端的 .pom
文件中有些驱动类的依赖是没有的,需要我们自己去添加,要不然运行该数据中的 sql 就会报错,比如我这里有个数据库的类型是 mssqlserver
我这里就新增一个数据集,选用的是 mssqlserver 这个数据库
可以看到点击预览就报错了,后台错误日志信息如下:
大概意思就是 Jdbc 获取连接池时出现问题了,解决方法就是根据 数据库
对应的驱动类添加对应的 依赖
,我这里连的数据库是 mssqlserver
,所以我在 .pom
文件添加 mssqlserver
对应的依赖即可
<!-- mssqlserver 对应的驱动类 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.2.2.jre8</version>
</dependency>
maven 一下,重启项目即可。
2. 请求超时问题
如果你的 sql 写得比较复杂,或者查询效率比较慢,又或者报表结构过于复杂等等原因导致请求超时,前端会提示 timeout 20000ms exceeded
,后端会提示:你的主机中的软件中止了一个已建立的连接
,后台错误日志信息如下:
这个错误的出现的原因就是前端限制了 20000 ms,如果在这个时间内后端还没有响应的话,前端就拒绝接收了后端返回的数据了,而后端传着传着,前端把门都给关了,能不报错吗?解决方案就是将前端设置的 请求超时时间
调大一点,修改 report-ui 下 src\utils\request.js
文件中的 timeout
,再重启下前端就行
3. 空值导致的空指针异常
数据集中的 sql 语句如果对 空值
没有做处理的话,就可能出现空指针异常,比如点击 预览
,前端展示 系统异常
后端就是:java.lang.NullPointerException: null
根据后台错误日志可以看到是 ReportExcelServiceImpl.java:336
这一行代码抛出的,可以点击找到对应的地方,是 fieldLabel
为 null
导致的,解决方法就是要么 sql 对那些 空值
给个默认的 值,要么就直接改后端的代码,比如:
代码如下(示例):
// 如果 fieldLabel 为 null ,就设置成 " "
if (fieldLabel==null) {
fieldLabel = " ";
}
String replace = v.replace("#{".concat(dataSet.getSetCode()).concat(".").concat(dataSet.getFieldLabel()).concat("}"), fieldLabel);
重启后端,即可解决。
4. 表字段长度不够
这个也是比较常见的问题,解决方案很简单,就是找到对应的表扩容字段即可
5. 导出文件失败
这个就是你使用导出功能没有配置路径的原因了,换个你电脑上有的路径
比如说我把 dist-path 改成 dist-path: D:\download
,使用导出功能的时候就放到我 D 盘下的 download 目录下了
总结
以上就是我这两天学习 AJ-Ropert 的收获以及解决的问题。