前言

作为geek后端程序员,画图的选择其实有很多,手画,excel,ppt,copy别人的图等。虽然用excel最方便,但是类似按中国省份来显示详细数据的图,excel是画不了的,而PPT画起来又很费劲。而JS有工具却能轻松的解决这个问题,似乎又得学习前端来画图?

并不是。后端工程师擅长处理数据,而借用Spring Boot + ECharts,就能结合数据和前端快速的画一个优雅的图。

知识点

  1. Spring Boot : web-starer的引入、spring boot编译插件的引入。
  2. 模板引擎: Thymleaf的使用。html知识。
  3. webjar: webjar 和 webjar-locator 的使用。
  4. jQuery: ajax的用法。JS知识。
  5. ECharts: 图表的基本用法。ECharts官网

实战

1、环境准备

  • 一台电脑
  • InrelliJ IDEA

2、创建 Spring Boot 启动工程

完整Demo地址:https://github.com/mickjoust1018/mickjoust-boot-demo/tree/master/boot-echarts

  1. 新建包:com.mickjoust.demo.spring.boot
  2. 创建 Class :LocalChart
  3. 配置一个 @RestController 并使用 @SpringBootApplication 自动启动。
  4. 加载默认启动项:SpringApplication.run(LocalChart.class,args);

LocalChart.java 代码示例

package com.mickjoust.demo.spring.boot;import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@SpringBootApplication
public class LocalChart {public static void main(String[] args) {SpringApplication.run(LocalChart.class,args);}
}
  1. 配置 Maven 依赖。

pom.xml 示例

 <properties> //1<spring.boot.version>2.1.3.RELEASE</spring.boot.version></properties><build> //2<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring.boot.version}</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build><dependencies>//3 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>${spring.boot.version}</version></dependency>//4<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version><scope>provided</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>org.webjars</groupId><artifactId>webjars-locator</artifactId><version>0.37</version></dependency><dependency><groupId>org.webjars.bower</groupId><artifactId>echarts</artifactId><version>4.2.1</version></dependency><dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.4.1</version></dependency><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId><version>3.3.7</version></dependency></dependencies>

说明:

  • 1:Spring Boot 使用 2.1.3.RELEASE 版本。
  • 2:常规编译配置。
  • 3:引入 spring-boot-starter-web、spring-boot-starter-thymeleaf 做基础支撑。
  • 4:引入 lombok 、fastjson 做简化 get、set 和返回 json 数据;同时引入webjar 和 webjar-locator。

4、发布接口

我们定义两个接口:

  • 一个页面展示:/localchart
  • 一个返回json数据:/getJsonData

再定义一个测试对象 User

 @RequestMapping("/localchart") //1public ModelAndView localChart(){ModelAndView model = new ModelAndView();User user = new User("蔬菜列表",new String[]{"土豆", "番茄", "白菜", "芹菜"});model.addObject(user);model.setViewName("localchart");return model;}@RequestMapping(value = "/getJsonData")public String getjsondata(){return null;}@Getter@Setter@AllArgsConstructorclass User { //2private String name;private String[] array;}

说明:

  • 1:构建一个 User 对象的测试数据,并添加到 ModelAndView 对象中,然后设置 ViewName 来指定对应的html文件为localchart,html。
  • 2:使用 lombok 注解来标示get、set和全参数构造函数。

5、构建html

既然我们想要展示图表,就需要一个html页面,我们这里使用 Spring Boot 御用的Thymleaf。

在 resources 下新建目录和文件:templates / localchart.html (templates 为默认目录地址)。

localchart.html 代码示例

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head> //1<meta charset="UTF-8"/><title th:text="用户信息">User</title><!--默认拼接前缀路径,开头请勿再添加斜杠,防止部署运行报错!--><script th:replace="head::static"></script>
</head>
<body>
<!--测试使用--> //2
<h1 th:text="${user.name}">列表名称</h1>
<ul><li th:each="item: ${user.array}" th:text="${item}">条目</li>
</ul>

head.html 代码示例:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"><!--声明static为页面片段名称--><head th:fragment="static"> //3<link th:href="@{/webjars/bootstrap/css/bootstrap.css}" rel="stylesheet" type="text/css"/><script th:src="@{/webjars/jquery/jquery.js}"></script><script th:src="@{/webjars/echarts/dist/echarts.js}"></script><script th:src="@{/webjars/bootstrap/js/bootstrap.js}"></script></head>
</html>

说明:

  • 1:配置编码类型为:UTF-8;显示用户信息;使用静态头文件head.html。
  • 2:显示一个简单的列表循环显示数据。
  • 3:头文件,存放脚本和css引用。这里我们使用 webjar 和 webjar-locator。webjar-locator 的作用在于省略掉js包的版本号。

6、加入ECharts

到这里,已经能够成功的运行 Spring Boot 程序并显示测试列表了,不过,我们关注的重点是加入ECharts。

什么是ECharts?

ECharts,缩写来自 Enterprise Charts,商业级数据图表,是百度的一个开源的数据可视化工具,一个纯 Javascript 的图表库,能够在 PC 端和移动设备上流畅运行,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的 Canvas 库 ZRender。

曾经我用过老牌的 highcharts,感觉还行,那时的 ECharts 做得还很一般,不过中文文档很详细,然后,ECharts 这些年慢慢就反超了,关键是 ECharts 能用中国地图,这点是 highcharts 不能比的。

实战继续。

官方示例一般都是选柱状图,我们这里选思维导图。

首先,构建数据。

@RequestMapping(value = "/getJsonData")public String getjsondata(){Map<String,Object> map = new HashMap<String, Object>();map.put("123",123);Tree root = new Tree();List<Tree> rootChildren = new ArrayList<Tree>();root.setName("知识体系");root.setChildren(rootChildren);Tree root11 =new Tree("技能1");Tree root12 =new Tree("能力1");Tree root13 =new Tree("知识1");rootChildren.add(root11);rootChildren.add(root12);rootChildren.add(root13);List<Tree> pointList11 = new ArrayList<Tree>();List<Tree> pointList12 = new ArrayList<Tree>();List<Tree> pointList13 = new ArrayList<Tree>();for (int i = 0; i < 20; i++) {pointList11.add(new Tree("专业技能",111111+i));}for(int i = 0; i < 20; i++) {pointList12.add(new Tree("通用能力",222222+i));}for(int i = 0; i < 20; i++) {pointList13.add(new Tree("领域知识",333333));}root11.setChildren(pointList11);root12.setChildren(pointList12);root13.setChildren(pointList13);return JSON.toJSONString(root);}

其次,在 localchart.html 里加入如下代码:

<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="main" style="width: 800px;height:800px;"></div> //1
<script>var myChart = echarts.init(document.getElementById('main')); //2myChart.showLoading(); //3$.ajax({ //4type : "post",async : true,//异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)url : "http://localhost:8080/getJsonData",    //请求发送给数据接口data : {},dataType: "json",success : function(result) {//请求成功时执行该函数内容,result即为服务器返回的json对象if (result) {myChart.hideLoading(); //5myChart.setOption(option = { //6tooltip: {trigger: 'item',triggerOn: 'mousemove'},series:[{type: 'tree',data: [result], //7top: '1%',left: '15%',bottom: '1%',right: '7%',symbolSize: 7,orient: 'RL',label: {position: 'right',verticalAlign: 'middle',align: 'left'},leaves: {label: {position: 'left',verticalAlign: 'middle',align: 'right'}},expandAndCollapse: true,animationDuration: 550,animationDurationUpdate: 750}]});}},error : function(errorMsg) {//请求失败时执行该函数alert("请求数据失败!");myChart.hideLoading();}})
</script>

说明:

  • 1:配置显示框大小,作为渲染的DOM容器。
  • 2:初始化容器。
  • 3:显示进度圈。
  • 4:使用jquery发送ajax请求,这里使用异步获取json数据。
  • 5:获取结果后,隐藏进度圈。
  • 6:传入渲染数据的参数。
  • 7:result放这里。至于其它参数,有兴趣的同学可去官网研究。

7、 运行

先运行程序,再在浏览器输入:http://localhost:8080/localchart ,效果如下:

小结

通过Spring Boot 的快速启动,加上模板引擎的简洁语法,我们一起快速构建了ECharts 的本地图表程序。

顺便复习了如下知识点:

  1. Spring Boot : spring-boot的使用。
  2. 模板引擎: Thymleaf的使用。html知识。
  3. webjar: webjar 和 webjar-locator 的使用。
  4. jQuery: ajax的用法。JS知识。
  5. ECharts: 图表的基本用法。ECharts官网

干嘛非得这么麻烦?

因为这是快速构建监控系统界面的基础,也是给上级领导汇报时,不再苦于数据还得用Excel来画的一种解法。

echarts功能很强大,配置其实很简单,我们只需要使用数据和渲染分离的思维,就能快速画出漂亮的图,而如果用ppt工具或者excel反而更麻烦。这是作为geek程序员的一大好处之一。


完整Demo地址:https://github.com/mickjoust1018/mickjoust-boot-demo/tree/master/boot-echarts

Spring Boot 实践折腾记(20):Thymleaf + webjar + ECharts 构建本地图表相关推荐

  1. Spring Boot 实践折腾记(11):使用 Spring 5的WebFlux快速构建效响应式REST API

    关于Spring 5中的反应式编程支持Reactor类库,上一篇文章< Spring Boot 实践折腾记(10):2.0+版本中的反应式编程支持--Reactor>已经简要介绍过,Spr ...

  2. Spring Boot 实践折腾记(16):使用Scala

    英国作家萨缪尔·约翰逊曾说过,成大事不在于力量的大小,而在于能坚持多久. 前面我们介绍了如何在Spring Boot下使用Kotlin和Groovy,还有一个热门语言是Scala,做大数据的同学对Sc ...

  3. Spring Boot 实践折腾记(15):使用Groovy

    Java是在JVM上运行的最广泛使用的编程语言.不过,还有很多其他基于JVM的语言,比如Groovy,Scala,JRuby,Jython,Kotlin等等.其中,Groovy和Scala现在在Jav ...

  4. Spring Boot 实践折腾记(10):响应式编程支持库Reactor

    Spring Boot 2.0发布已经过去了2个多月,随着微服务的流行,Spring Boot也越来越受到青睐,更好的隔离编程范式得到了越来越多项目的应用,这是一件值得高兴的事. Spring Boo ...

  5. Spring Boot 实践折腾记(13):使用WebFlux构建响应式「推送API 」

    西方著名宗教史家米尔恰·伊利亚德说,如果今天我们不生活在未来,那么未来,我们会生活在过去. 随着移动互联网的普及,基于C/S模式的APP开始了它的又一轮爆发式增长,过去,我们总说要去C/S模式,拥抱B ...

  6. Spring Boot 实践折腾记(12):支持数据缓存Cache

    不管是什么类型的应用程序,都离不开数据,即便如现在的手机APP,我们依然需要使用数数据库,对于不懂的人,当然,我们可以告诉他们一些高大上的概念,但是作为专业人士,就一定要明白背后的真实原理到底是什么. ...

  7. Spring Boot 实践折腾记(四):配置即使用,常用配置

    生活不可能像你想象的那么好,但也不会像你想象的那么糟.我觉得人的脆弱和坚强都超乎自己的想象.有时,可能脆弱得一句话就泪流满面:有时,也发现自己咬着牙走了很长的路.--源自 莫泊桑 开始前- 本章内容主 ...

  8. java heroku_使用Spring Boot和Heroku在20分钟内完成Java的单点登录

    java heroku 建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不 ...

  9. 使用Spring Boot和Heroku在20分钟内完成Java的单点登录

    建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不会建立auth了! 大规 ...

最新文章

  1. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间
  2. VMware安装Centos7桌面版超详细图文过程
  3. 今天是我“略懂”Python的第200天,我遇到了新刺激……
  4. 模块化数据中心成未来互联网企业首选
  5. 【采用-决策引擎】一文看懂风控决策引擎搭建思路
  6. asp.net mvc 自定义 pager 封装与优化
  7. Python 两种装饰器
  8. Git中如何利用生成SSH个人公钥访问git仓库
  9. 向Array中添加二分插入排序
  10. CSS使表格不变形(原创)
  11. python执行adb命令_Python脚本之ADB命令(一)
  12. PLC编程全科班+人机界面编程+电机+变频器通信培训
  13. (一)NIST CSF-框架介绍
  14. JavaEE程序猿的Java世界观⑤
  15. 计算机连接公用网络受限,电脑连接无线网络受限怎么解决【解决方法】
  16. 有3个学生3门功课成绩s={‘Teddy‘:[100,90,90], ‘Sandy‘:[98,91,80],‘Elmo‘:[90,90,83]} 要求输出每个学生的姓名,平均成绩(结果保留1位小
  17. 五年级上册《桂花雨》教案
  18. 嵌入式计算机的关键特征,与通用计算机的区别
  19. 制造企业该如何选择MES生产管理系统?盘点四大生产管理系统软件
  20. 精通oracle 10gproc/c,读书笔记之---精通oracle10g.plsql

热门文章

  1. “可持续发展” 是营销辞藻吗?
  2. Go语言爱好者周刊:第 3 期
  3. 思腾合力「CH2D20-MA」企业级高性能双路通用服务器
  4. Java版赤色要塞源码分析
  5. 【转】盗版XP黑屏解决方法
  6. vue、uni-app剪裁图片
  7. 银科首款5G手机,不只是畅快那么简单!
  8. 英语演讲中式建筑PPT模板
  9. 576芯SMC三网合一光缆交接箱单面开门
  10. LWN: 改进GCC的 -fanalyzer 选项!