目录[TOC]
1、FineReport常用功能
大屏
传统报表
数据填报
数据随行(移动端)
权限划分
2、FineReport传统报表的开发流程
新建数据连接:比如说,你要连接数据库,连接数据库的哪一张表。
新建模板数据集:模板数据集只对当前文件生效,常用的。
设置表的模板样式:自定义模板样式,并绑定数据。
效果预览:完成上述操作后,可以进行效果预览,效果不好,我们调整后,再进行预览…
3、FineReport开发流程演示说明1)怎么查看firereport的工作环境
2)新建数据连接① 新建连接:完成下面的1,2,3,4步骤
② 数据库连接:完成下面的1,2,3,4,5,6步骤
3)创建数据集
模板数据集:只针对当前文件生效。
服务器数据集:对所有文件生效。
① 创建模板数据集
② 最终效果如下
4)模板样式设计:绑定数据eg:假如我们想要设计的模板样式如下:
① 按照图示步骤,完成1,2,3,4,5的操作
② 保存这个模板
5)模板预览① 点击如下按钮
② 效果如下:自动在浏览器中打开
4、扩展操作(很重要)
扩展操作分为:纵向扩展(默认)、横向扩展、不扩展。
1)连接 ...
经验教程
未读需求-问题
在生产中,由这样的一个需求:重新使用data中的数据,但是data中的数据已经被各种表单、变量等赋值,那么怎么重置data的值呢?
解决方案① 逐个赋值1234567891011121314151617...data() { return { name: '', sex: '', desc: '', ------省略------- }}...// 逐个赋值this.name = ''this.sex = ''this.desc = ''
很明显,这个方法比较笨,当然也可以实现效果,但是一个一个去重新赋值比较麻烦而且代码看起来也会比较乱。
那么,有如何做才能==更优雅==?
② 使用 Object.assign()
MDN关于该方法的介绍:Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。 ...
技术学习
未读前言本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结
分布式锁概览在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问,Java中我们一般可以使用synchronized语法和ReetrantLock去保证,这实际上是本地锁的方式。但是现在公司都是流行分布式架构,在分布式环境下,如何保证不同节点的线程同步执行呢?
实际上,对于分布式场景,我们可以使用分布式锁,它是控制分布式系统之间互斥访问共享资源的一种方式。
比如说在一个分布式系统中,多台机器上部署了多个服务,当客户端一个用户发起一个数据插入请求时,如果没有分布式锁机制保证,那么那多台机器上的多个服务可能进行并发插入操作,导致数据重复插入,对于某些不允许有多余数据的业务来说,这就会造成问题。而分布式锁机制就是为了解决类似这类问题,保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。大致意思如下图所示(不一定准确):
分布式锁的特点分布式锁一般有如下的特点:
互斥性: 同一时刻只能有一个线程持有锁
可重入性 ...
技术学习
未读
使用Base64编码上传文件的一些原因:通用性:Base64编码的结果是ASCII字符串,这是一种通用的字符集,可以在几乎所有系统中被解析。兼容性:HTTP协议是文本协议,一些非ASCII字符在传输过程中可能出现问题。Base64编码将二进制数据转换成纯文本,避免了这个问题。数据封装:有时候,我们可能需要将文件和其他数据(如文本、JSON等)一起发送。Base64编码可以让我们把文件编码成字符串,并和其他数据一起发送。然而,使用Base64编码也有缺点:体积增大:Base64编码会使数据体积增大约33%,因为每3个字节的数据需要用4个字节的Base64字符来表示。CPU使用率:编码和解码Base64需要CPU资源,大量的Base64编码/解码可能会影响性能。
1. 前言最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本质上都是一样的,那么为什么还要先转成Base64 ...
如何使用Builder模式创建线程池前言Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行。
Builder 设计模式在作者编码过程中,属于比较常用的模式之一。优秀的设计模式总是会受到广大开发者的青睐,Hutool 也是其中之一。
因为这周编写的业务需要用到线程池,就去 Hutool thread 包下看了看,还真有惊喜,学习到了一种之前编码中没用过的 Builder 模式实现。
这里必须提一句:设计模式重要的是思想,一种设计模式可能不止一种实现方式。
Builder 模式应用场景Builder 模式作用域:如果类的属性之间有一定的依赖关系或者约束条件(源自设计模式之美),那么就可以考虑使用 Builder 设计模式。
我们依照线程池来举例,默认创建的线程池,构造方法最多有七个参数,核心线程数、最大线程数、阻塞队列、线程存活时间…
日常使用创建线程池时,大家想一下为什么要这么设计?一起来看下源码注释中如何解释此行为。
线程池之所以设置如此之多的构造参数,是因为对这些参数会有一定规则的校验,如果不满足线程池的规则,将不允许 ...
技术学习
未读在工作中的许多场景下,我们都会使用到List这个数据结构,那么同样的有很多场景下需要删除List中的某一个元素或某几个元素,那么我们该如何正确无误地删除List中的元素
知识准备for循环的执行顺序这里借用百度百科的一张图,简明扼要的介绍一下。
Iterator迭代器介绍迭代器:迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。Iterator 模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向每次遍历前都需要知道要遍历集合的内部结构。
123456789101112131415161718// 遍历listList list = new ArrayList();list.add(1);list.add(2);for (int i = 0; i < list.size(); i++) { Object object = list.get(i); // do something} // 遍历mapMap<String,String> ...
[TOC]
1. 前言:Aop面向切面编程,是编程中一个很重要的思想本篇文章主要介绍的是SpringBoot切面Aop的使用和案例
2.什么是Aop
AOP(Aspect OrientedProgramming):面向切面编程,面向切面编程(也叫面向方面编程),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
3.使用场景利用AOP可以对我们边缘业务进行隔离,降低无关业务逻辑耦合性。提高程序的可重用性,同时提高了开发的效率。一般用于日志记录,性能统计,安全控制,权限管理,事务处理,异常处理,资源池管理等使用场景
4.为什么需要面向切面编程面向对象编程(OOP)的好处是显而易见的,缺点也同样明显。当需要为多个不具有继承关系的对象添加一个公共的方法的时候,例如日志记录、性能监控等,如果采用面向对象编程的方法,需要在每个对象里面都添加相同的方法,这样就产生了较大的重复工作量和大量的重复代码,不利于维护。面向切面编程(AOP)是面向对象编程的补充 ...
技术学习
未读一个警告首先看下问题的现象,使用@Autowired被idea警告,而使用@Resource则不会:
@Autowired和@Resource的差异来源
@Resource是JSR 250中的内容,发布时间是2006年
@Autowired是Spring2.5中的内容,发布时间是2007年
@Resource是JSR的标准,Spring框架也提供了实现。既然@Autowired是在@Resource之后发布的,应该就有@Resource不能表达的含义或者不能实现的功能。
用法注入方式虽然我们开发中使用最多的方式是属性注入,但其实存在构造函数注意、set方法注入等方式。相比于@Resource支持的属性注入和set方法注入,@Autowired还能支持构造方法注入的形式,@Resource是不行的。
可指定属性@Autowired支持required属性
@Resource支持7个其它属性
bean查找策略
@Autowired是类型优先,如果这个类型的bean有多个,再根据名称定位
@Resource是名称优先,如果不存在这个名称的bean,再去根据类型查找
查找过程@ ...
SpringBoot集成MQTT步骤1. 引入pom依赖123456789101112131415161718192021222324252627282930313233343536373839404142434445464748<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--Spring boot Web容器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--FreeMarker模板视图依赖--> ...
Emqx简介EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 ==Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器==。
EMQ X 设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接,支持在海量物联网设备间低延时消息路由:
1. 稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。2. 分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。3. 消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。4. 完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 或私有协议支持。
官方文档:https://docs.emqx.cn/broker/v4.3/getting-started/install.html
MQTT是什么?MQTT全称消息队列遥测传输 (Message Queuing Telemetry Transport)。其主要提供了订阅 ...