☰
jimureport-example 集成示例工程完全指南:从源码启动到 Docker 部署积木报表
2026/10/14 3:01:08 网站建设 项目流程
  • 数据可视化
  • 数据分析
  • 后端
  • 低代码
  • AI 应用
  • 人工智能

【免费下载链接】jimureport

「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形报表、仪表盘门户设计等,完全免费!秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、解决各类报表难题。

项目地址:https://gitcode.com/jeecgboot/jimureport
点击查看免费下载

导读

jimureport-example是积木报表(JimuReport)官方提供的 Spring Boot 集成示例工程,基于 Spring Boot 4.1 架构演示了报表工作台、大屏(仪表盘)工作台与 ChatBI 对话式智能数据分析的完整落地方式。本文以该示例工程为核心,带你从零完成环境准备、初始化数据库、源码启动、关键配置解读、可选 Redis 集成以及 Docker 镜像构建部署,并结合仓库源码剖析其 Sa-Token 鉴权、CORS、数据字典、JavaBean 数据集等二次开发扩展点。读完本文,你将具备独立搭建一套积木报表演示/生产环境的能力,并能在此基础上快速定制自己的报表平台。

一、示例工程定位与环境要求

jimureport-example是整个 JimuReport 开源仓库中的集成示例代码(jimureport-example/README.md中明确描述为"积木报表集成示例代码"),其自身即是一个可直接运行、可直接改造成脚手架的最小化报表平台。仓库根目录的 README.md 指出,积木报表是一款免费的数据可视化报表工具,集报表、打印、大屏、仪表盘、对话式 BI 于一体;而本示例工程则将报表(JimuReport)、大屏/仪表盘(JimuBI)、ChatBI 三者的官方 Starter 汇聚到了同一个工程中。

根据示例工程文档与 pom.xml,环境要求如下:

依赖要求说明
JDKJDK 17+工程使用 Spring Boot 4.1 架构,pom.xml中<java.version>17</java.version>
MySQLMySQL 5.7+手工执行 jimureport.mysql5.7.create.sql,会自动创建库jimureport
配置文件application-dev.yml开发环境主要配置所在
Redis可选用于 Sa-Token 权限集成,需要时在 pom 中解开对应依赖注释

注意:工程名中的 "example" 仅表示其作为官方集成范例的角色,功能上它是一个完整的、开箱即用的报表/大屏/ChatBI 平台,也是后续将积木报表 Starter 集成进自有 Spring Boot 项目时最直接的参考蓝本。

1.1 依赖清单速览(pom.xml)

从 pom.xml 可以看到,示例工程按官方推荐方式引入了一组 Starter:

  • 积木报表:jimureport-spring-boot4-starter(2.5.4)
  • 积木 BI 大屏/仪表盘:jimubi-spring-boot4-starter(2.5.4)
  • 积木 ChatBI:jimuchatbi-spring-boot4-starter(1.2.0)
  • 辅助包:jimureport-nosql-starter3(Mongo、Redis、文件数据集支持)、jimureport-echarts-starter(后台导出接口 ECharts 图表支持)
  • 权限框架:sa-token-spring-boot4-starter(1.45.0)
  • 持久层:Minidao + Druid(1.2.24),并内置了jsqlparser(5.0)作为 SQL 解析引擎

pom.xml中properties段落明确声明了各版本号:jimureport.version=2.5.4、jimubi.version=2.5.4、jimuchatbi.version=1.2.0,与仓库根目录 README 中 v2.5.4 的版本信息一致。另外,工程预置了阿里云与 jeecg 两个 Maven 仓库源(pom.xml),并注释保留了达梦、人大金仓、神通、ClickHouse、TDengine 等国产化与大数据数据库驱动,需要什么数据库时手工打开注释即可。

二、三步快速启动(源码运行)

Step 1:执行初始化脚本

在 MySQL 中执行 jimureport.mysql5.7.create.sql。该脚本第一行即为:

CREATE database if NOT EXISTS `jimureport` default character set utf8mb4 collate utf8mb4_unicode_ci; use `jimureport`;

即自动创建jimureport数据库,随后建表并写入初始数据。从脚本内容可以看到,其中不仅包含报表、数据源、数据集等积木报表核心表,还包含chat2bi_assistant(Chat2BI 对话助理)、chat2bi_conversation等 ChatBI 表,并预置了"保险问数助手""系统用户助手"等演示助理数据,因此该脚本是报表 + 大屏 + ChatBI 三合一平台的完整初始化 SQL。

Step 2:启动项目

运行启动类 JimuReportApplication.java(IDE 中右键 Run 即可):

@SpringBootApplication(scanBasePackages = {"org.jeecg", "com.jeecg"}) public class JimuReportApplication { public static void main(String[] args) { ConfigurableApplicationContext application = SpringApplication.run(JimuReportApplication.class, args); ... } }

两个关键点值得留意:

  • scanBasePackages同时扫描org.jeecg(积木报表/Jimubi/ChatBI 的 Starter 内部包)与com.jeecg(示例工程的自定义代码),这是 Starter 模式集成的前提;
  • 启动成功后控制台会打印三个工作台访问地址,其中除文档中提到的报表与仪表盘外,还包含ChatBI 工作台http://localhost:8085/jimu/chat2bi/index。

Step 3:访问系统(默认账号 admin / 123456)

工作台访问地址
报表工作台http://localhost:8085/jmreport/list
仪表盘(大屏)工作台http://localhost:8085/drag/list

默认账号密码为admin / 123456,其来源是 application-dev.yml 中的spring.security.user配置,且由 SecurityConfig.java 通过@ConfigurationProperties(prefix = "spring.security")绑定到代码中。登录动作由 LoginController.java 的/doLogin接口完成:比对配置中的用户名密码后调用StpUtil.login(...)签发 Sa-Token,并支持redirect回跳参数;同时该控制器还提供了/isLogin查询登录状态、/logout退出登录,以及/isDefaultCredentials判断当前是否仍在使用默认演示账号的接口。

三、关键配置详解:application-dev.yml

示例文档指出项目配置位于src/main/resources/application-dev.yml,application.yml 中通过spring.profiles.active: dev默认激活该 Profile。以下按区块解读其中的核心参数。

3.1 服务与数据库

server: port: 8085 spring: datasource: url: jdbc:mysql://${MYSQL-HOST:127.0.0.1}:${MYSQL-PORT:3306}/${MYSQL-DB:jimureport}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver

数据源地址支持MYSQL-HOST、MYSQL-PORT、MYSQL-DB三个环境变量覆盖,缺省值分别为127.0.0.1、3306、jimureport——这正是后文 Docker 部署时通过-DMYSQL-HOST=jimureport-mysql指定容器间连接方式的依据。此外还配置了:

  • spring.servlet.multipart:上传文件大小上限 10MB;
  • spring.data.redis:Redis 配置(database 1,默认无密码);
  • spring.security:登录认证开关enable: true与账号密码;
  • freemarker:模板引擎配置,模板路径classpath:/templates,模板后缀.ftl;
  • minidao.base-package:持久层扫描范围,覆盖org.jeecg.modules.jmreport.*、org.jeecg.modules.drag.*、org.jeecg.modules.chat2bi.*三个模块。

3.2 jeecg.jmreport 报表核心参数

jeecg: uploadType: local # local|minio|alioss jmreport: saasMode: # 多租户模式:created 按创建人隔离 / tenant 按租户隔离 signatureSecret: dfc4f81aa9a93271869fab53b3aaed91d836429ac3924184 # 接口加签密钥(示例值,部署前请替换) col: 100 # 展示列数 row: 200 # 展示行数 max-data-rows: 100000 # 无分页模式/打印全部场景的数据量上限 apiBasePath: http://192.168.1.11:8085 # 自定义 API 接口前缀(#{api_base_path} 与 #{domainURL} 的值)

其中signatureSecret为积木报表接口加签密钥,配置注释明确提示"示例值随开源仓库公开,部署前请替换为自己的随机值"——这是上线前必须处理的安全项。

AI 助手配置(jeecg.jmreport.ai):

ai: base-url: https://api.deepseek.com # OpenAI 兼容接口地址(必填) api-key: # API Key(必填,留空则 AI 不可用) model: deepseek-v4-pro # 模型名 temperature: 0 # 采样温度,建议 0 保证确定性输出 max-tokens: 16384 # 单次输出最大 token 数,DeepSeek 合法范围 [1, 393216] autoTableEnabled: false # AI 自动建表开关(⚠️ 会直接执行 DDL/DML,生产环境务必 false)

平台安全配置(jeecg.jmreport.firewall):

firewall: dataSourceSafe: false # 数据源安全:开启后禁止使用平台数据源、SQL 解析加签且不允许查询数据库 lowCodeMode: dev # 低代码开发模式:dev 开发模式 / prod 发布模式(关闭在线报表设计) sqlInjectionLevel: basic # SQL 注入检查级别:strict 严格 / basic 简单校验 / none 不校验 apiDsIpCheck: false # API 数据集出站请求内网/保留地址校验(SSRF 防护) apiDsIpWhite: - api.jeecg.com # 内网 IP 白名单(支持 IP/CIDR/域名),仅 apiDsIpCheck=true 时生效 - bootapi.jeecg.com

此外还包含邮件发送(jeecg.jmreport.mail,默认关闭)、自动化导出(automate.export,enable-auto-export: true、文件过期expired: 30天)、高德地图 API(gao-de-api,BI 大屏地图组件用)等扩展配置。

3.3 开发与生产 Profile 的差异

application-prod.yml 与 dev 配置形成鲜明对比,它演示了生产环境的安全加固方式:

  • firewall.dataSourceSafe: true(开发环境为 false);
  • firewall.lowCodeMode: prod(发布模式,关闭在线报表设计功能,仅 admin、lowdeveloper 角色可放开限制);
  • firewall.sqlInjectionLevel: strict(开发环境为 basic);
  • 单独声明pageSize(10/20/30/40)与 AI 的jeecg-host。

另外,工程还附带了 application-sqlserver.yml,展示了将数据库切换为 SQL Server(jdbc:sqlserver://127.0.0.1:1433)时的配置方式,可供非 MySQL 场景参考。

四、可选功能:Redis 权限集成

示例文档说明:如果想使用 Redis 集成权限,请把 pom.xml 中的以下依赖解开注释:

<!-- Sa-Token整合 Redis(使用jackson序列化方式) --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-redis-jackson</artifactId> <version>1.44.0</version> </dependency> <!-- 提供Redis连接池 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>

加上这两个依赖后,Sa-Token 的登录 Token 即可存储到 Redis 中,实现多实例共享会话与分布式登录态。从源码看,示例工程还提供了 RedisConfig.java,它在检测到项目中没有主RedisTemplateBean 时(@ConditionalOnMissingBean),自动创建一个 key 使用 String 序列化、value 使用 Jackson2Json 序列化的备用RedisTemplate,供大屏缓存等场景使用。

需要特别说明的是 Redis 的启动行为:在 application-dev.yml 中配置了

spring.data.redis.listener.auto-startup: false

注释解释了原因——Spring Boot 4.1 默认自动启动redisMessageListenerContainer,启动时会强制连接 Redis,本地无 Redis 时需设为 false,否则启动失败;报表缓存、跨节点大屏推送等功能在 Redis 可用前不生效,但不影响启动。即:不引入上述两个依赖、不配置 Redis,示例工程同样可以正常启动运行,Redis 是纯可选项。

五、Docker 镜像制作与一键部署

示例文档给出了完整的 Docker 构建步骤,结合工程内的 Dockerfile、db/Dockerfile 与 docker-compose.yml 可以看清整条链路。

5.1 构建步骤

# Step 1:下载项目 git clone https://gitee.com/jeecg/JimuReport.git # Step 2:进入 jimureport-example 根目录 cd JimuReport/jimureport-example # Step 3:Maven 打包 mvn clean package # Step 4:构建并启动镜像 docker-compose up -d # Step 5:访问报表(默认账号 admin / 密码 123456) # 报表工作台: http://localhost:8085/jmreport/list # 仪表盘工作台: http://localhost:8085/drag/list

说明:git clone https://gitee.com/jeecg/JimuReport.git为示例文档原文给出的命令;仓库当前托管于 GitCode 平台(https://gitcode.com/jeecgboot/jimureport),克隆时亦可使用该地址。mvn clean package会依据pom.xml中<artifactId>jimureport-example</artifactId><version>2.5</version>生成target/jimureport-example-2.5.jar。

5.2 docker-compose.yml 结构

docker-compose.yml 编排了两个服务:

  • jimureport-mysql:基于./db目录构建的 MySQL 容器。启动命令指定了--character-set-server=utf8mb4、--lower_case_table_names=1、--max_allowed_packet=128M等参数,宿主机端口映射为3307:3306;
  • jimureport:应用容器,映射8085:8085,与 MySQL 同处jimureport_network自定义网络。

两个 Dockerfile 的实现如下:

db/Dockerfile(MySQL 镜像):

FROM registry.cn-hangzhou.aliyuncs.com/jeecgdocker/mysql:8.0.19 ENV TZ=Asia/Shanghai COPY ./jimureport.mysql5.7.create.sql /docker-entrypoint-initdb.d

将初始化 SQL 复制到 MySQL 容器的/docker-entrypoint-initdb.d目录,容器首次启动时即自动完成建库建表。

应用 Dockerfile:

FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/java:17-anolis WORKDIR /jimureport EXPOSE 8085 ADD ./target/jimureport-example-2.5.jar ./ CMD java -DMYSQL-HOST=jimureport-mysql -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jimureport-example-2.5.jar

关键点:-DMYSQL-HOST=jimureport-mysql正是通过上文提到的数据源环境变量占位符{MYSQL-HOST}注入容器间的主机名,使应用在 Docker 网络内连接 MySQL 服务,而不是本机 127.0.0.1。

5.3 Mac M 系列芯片适配

示例文档针对 Apple Silicon(M 系列)芯片给出了明确改造方案:

  1. 将jimureport-mysql的基础镜像改为 ARM 平台:修改 db/Dockerfile 第一行为FROM arm64v8/mysql:8;
  2. 将jimureport的基础镜像改为 ARM 平台:先自行制作基于 ARM 架构的 JDK 镜像,再修改 Dockerfile 第一行为FROM <你制作的镜像名称>。

六、二次开发扩展点(源码级解析)

示例工程的价值不仅在于"能跑",更在于它演示了积木报表 Starter 的标准扩展方式。以下扩展点均在com.jeecg.modules.jmreport包下,可作为自有项目集成的模板。

6.1 自定义鉴权:JimuReportTokenServiceImpl

JimuReportTokenServiceImpl.java 实现了积木报表提供的JmReportTokenServiceI接口,类注释明确指出"如果不进行自定义,则所有请求不做权限控制"。其核心方法:

  • getToken(HttpServletRequest):优先从 Sa-Token 上下文中取 Token,为空时回退到 URL 参数token,并写入 Sa-Token 上下文;
  • verifyToken(String token):若securityConfig.getEnable()为 false 则直接放行;否则调用StpUtil.checkLogin()校验登录态。未登录且非 AJAX 请求时,重定向到/login/login.html(带 redirect 回跳);
  • getRoles:返回示例工程的四个角色admin、lowdeveloper、dbadeveloper、chat2bi(注释说明积木内置三个角色 admin/lowdeveloper/dbadeveloper);
  • getPermissions:返回一组权限指令字符串,例如jmreport:datasource:testConnection、jmreport:design:saveDb、drag:datasource:saveOrUpate等,注释标明与jmreport、drag各控制器上的@RequiresPermissions注解一一对应;
  • getTenantId():从请求头(X-Tenant-Key/X-Tenant-Id)或参数中读取租户 ID,配合saasMode实现多租户隔离;
  • getRoleList/getUserList:为设计器角色/用户选择提供分页数据。

6.2 Sa-Token 拦截与安全响应头

SaTokenConfigure.java 注册了 Sa-Token 拦截器(addPathPatterns("/**"))与全局过滤器SaServletFilter:

  • 放行路由:/favicon.ico、/login/**、/doLogin;
  • setBeforeAuth统一注入安全响应头:Content-Security-Policy: frame-ancestors *(允许报表被嵌入 iframe)、X-XSS-Protection: 1; mode=block、X-Content-Type-Options: nosniff。

配套的 StpInterfaceImpl.java 实现了 Sa-Token 的StpInterface权限扩展(当前为演示用的模拟权限码,实际项目中需改为从业务库查询)。此外,CustomCorsConfiguration.java 为所有接口开放了跨域支持(允许 Cookie、allowedOriginPatterns("*")),方便前后端分离部署。

6.3 JavaBean 数据集:TestRpSpringBean

JimuReportTokenServiceImpl.java 是一个极好的"不写 SQL、用代码提供数据"的示例:它实现了IDataSetFactory接口,Bean 名为testDataJavaBean,在报表设计器中选择该数据集即可:

  • createData(Map param):无分页模式,直接返回List<Map<String, Object>>;
  • createPageData(Map param):分页模式,必须从参数中读取pageSize,返回带pageSize、total、records的JmPage对象。

6.4 大屏字典扩展:JimuDragExternalServiceImpl

JimuDragExternalServiceImpl.java 实现了大屏模块的IOnlDragExternalService接口,把积木报表的数据字典能力(IJimuReportDictService)桥接给大屏设计器使用,包括按字典 code 查询字典项、按表字典(dictTable/dictText/dictField)查询等,是报表与大屏两个模块共用字典体系的标准做法。

七、总结

围绕jimureport-example集成示例工程,本文完整覆盖了官方文档的全部操作路径:环境准备(JDK 17+ / MySQL 5.7+)→ 执行 初始化脚本 自动建库 → 启动 JimuReportApplication → 访问报表/仪表盘工作台,并深入解读了 application-dev.yml 中的数据库、AI、防火墙、多租户等核心参数,以及可选的 Redis 权限集成、Docker 一键部署(含 Mac M 系列 ARM 适配)与鉴权/数据集等二次开发扩展点。

对于希望把积木报表快速集成进自有 Spring Boot 项目的开发者,最直接的做法就是以本工程为蓝本:保留jimureport-spring-boot4-starter、jimubi-spring-boot4-starter、jimuchatbi-spring-boot4-starter依赖,复制初始化 SQL 与配置文件,按需实现JmReportTokenServiceI对接自有用户体系即可。生产环境上线前,请务必替换signatureSecret、关闭autoTableEnabled、将lowCodeMode切换为prod并按需收紧sqlInjectionLevel。

  • 数据可视化
  • 数据分析
  • 后端
  • 低代码
  • AI 应用
  • 人工智能

【免费下载链接】jimureport

「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形报表、仪表盘门户设计等,完全免费!秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、解决各类报表难题。

项目地址:https://gitcode.com/jeecgboot/jimureport
点击查看免费下载

相关推荐

上一篇:10分钟搞定Mem Reduct内存清理:中文界面与自动清理一次配好
下一篇:内存越用越卡?Mem Reduct 内存清理工具从汉化到自动清理一次配好

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询