自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 java开源后台管理系统完整源码,OA、工作流、可继承权限管理系统,前后端分离架构

springboot、Mysql、MybatisPlus作为基础框架使用JWT和Redis实现登录会话功能用户管理组织架构管理。参数管理菜单管理动态路由菜单。缓存信息系统安全策略附件管理黑名单。权限管理 :继承权限。系统监控:记录系统操作日志。定时任务管理:动态管理系统的任务调度。activiti工作流根据流程图配置动态展示审批按钮流程发起、挂起、激活、终止,指派、增员、减员bpmn-js流程在线设计器,可以在线新建并绘制流程保存

2020-11-11 12:07:23 8355 17

原创 sql中select查询大数据量表时很慢

查询花了将近40秒钟,结果集的数据量就有50万,而且多加一个where条件,都会导致查询耗时增加,就算加索引也没有效果,因为我这里必须要加几个where条件,而这些条件又无法过滤掉大部分的数据,所以只会白白增加耗时。不使用distinct,而是使用count + group by来去重,然后在外层过滤where条件,发现查询只要5秒多,速度一下子快了太多,可能是数据库中group by有着天然的优势吧。

2024-05-07 10:16:38 287 3

原创 clob字段查询速度慢的完美解决办法

一般我们使用clob类型是为了存超长文本,而varchar2类型最长只能存储4000个字节,所以超过4000的情况下无法储存。我保存数据的时候就在程序里面按照4000的长度截取成3部分,分别存储到三个字段中,这样这个字段的最大储存长度就拓展到了4000x3=12000个字节了,如果觉得还是不够用,可以继续加字段拓展。表中存在clob类型的字段,当表数据量只有1000时,普通的select查询速度就已经很慢了,因为读取clob字段会占用数据库的io和其他耗时操作,大大影响查询性能。

2024-04-02 09:46:29 334

原创 使用zip4j解压zip时文件名乱码解决最好的方案

zip4j解压zip时,出现中文乱码,看了下,zip4j解压时支持设置文件编码,我们只需要识别文件是不是utf-8编码,如果不是utf-8就使用gbk解压,但是这个判断没有100%准确的方式,我试过通过字节流的bom标记去判断,但是文件不一定有bom字节,所以不适用。我们先使用utf-8读取zip里面的文件名,然后判断文件名是否能使用gbk进行编码,如果不能,我们就用utf-8解压,如果gbk可以编码,就使用gbk进行解压。

2024-02-06 12:00:43 465

原创 springboot项目中使用线程池异步执行任务

【代码】springboot项目中使用线程池异步执行任务。

2024-01-24 16:50:26 426

原创 easyexcel上传校验的方法封装

使用自定义注解的方式来定义校验的类型,避免冗余代码。easyexcel版本3.1.5。

2024-01-12 14:47:05 853

原创 aspose通过开始和结束位置关键词截取word另存为新文件

【代码】aspose通过开始和结束位置关键词截取word另存为新文件。

2024-01-02 11:55:21 646

原创 RedisTemplate自增时保证原子性的lua脚本限制接口请求频率

改进方式:使用redis的lua脚本,将"读取值、判断大小、自增"放到redis的一次操作中,redis底层所有的操作请求都是串行的,也就是一个请求执行完,才会执行下一个请求。这三步在请求不是很密集的时候,程序执行很快,可能不会产生问题,如果两个请求几乎在同一时刻到来,我们第1步和第2步的判断是无法保证原子性的。1.先去从redis里面拿到当前请求次数。2.判断当前次数是否大于或等于限制次数。3.当前请求次数小于限制次数时进行自增。自增的lua脚本如下。

2023-12-28 18:29:14 855

原创 springboot启动项目自动动态加载数据库的groovy脚本

将groovy脚本保存在数据库中,页面支持动态增删改查,启动springboot项目时,从数据库中读取groovy配置表,然后编译脚本,项目中就可以直接调用使用脚本。创建springboot启动执行任务:GroovyApplicationRunner.java。开发环境:springboot+MybatisPlus。脚本实体类:Func.java。

2023-12-01 11:03:47 619

原创 linux重启jar包的脚本

【代码】linux重启jar包的脚本。

2023-11-30 10:55:38 436

原创 linux安装nginx

nginx下载地址:http://nginx.org/download。如果编译报错,需要安装依赖。

2023-11-15 16:45:25 115

原创 docker容器的日志占满磁盘空间处理办法

清空名为"容器id-json.log"的文件。

2023-11-06 09:54:00 132

原创 easypoi使用listener读取excel

easypoi使用listener读取excel。

2023-10-08 14:54:28 121

原创 使用poi准确读取excel单元格数据的方法

【代码】使用poi准确读取excel单元格数据的方法。

2023-09-26 11:23:50 794

原创 java使用jdbcTemplate查询并插入百万级数据解决方案

我们拿到ResultSet后,每次只读取10000条数据存到List中,然后将这些数据插入数据库,在插入结束之后清空这个List,jvm会回收这些数据释放内存,一直重复这个过程直到结果集读取完毕,就避免了内存泄漏的情况产生。我们使用jdbcTemplate的batchUpdate方法批量保存数据时,要想真正进行批量保存需要几个条件。因此我们需要写一个实现类继承ResultSetExtractor,去实现读取ResultSet的逻辑。背景:使用JdbcTemplate查询500万数据,然后插入到数据库。

2023-09-08 19:20:59 2466

原创 使用itextpdf对pdf进行签名盖章

使用itextpdf对pdf进行签名盖章。

2023-08-01 15:28:42 1150

原创 openssl生成PKCS12证书

4.将私钥和证书合并为PKCS12格式 openssl pkcs12 -export -in cert.crt -inkey private.key -out cert.p12。3.创建自签名证书 openssl x509 -req -days 3650 -in cert.csr -signkey private.key -out cert.crt。2.生成证书请求 openssl req -new -key private.key -out cert.csr。

2023-08-01 13:26:37 573

原创 Docker无法运行java虚拟机报错There is insufficient memory for the Java Runtime

Docker无法运行java虚拟机报错There is insufficient memory for the Java Runtime,需要升级容器内核runc版本

2023-07-20 11:19:20 2382

原创 java读取邮件标题时,突然报错Failed to load IMAP envelope

生产环境之前可以正常使用imap协议收取邮件,突然有一天报错Failed to load IMAP envelope,可以确定邮件服务器、账号密码、配置都是正确的,使用foxmail可以正常连接并成功收取邮件,因此可以推测java代码可能有兼容性问题,连接服务器的代码如下,开启mail.debug后,打印日志可以看到已经成功使用imap连接到服务器。这里不知为何没有获取到envelope这个对象,网上找到说法说是邮箱服务器设置了限制,只收取最近30天的邮件,但是我遇到的并不是这个问题。

2023-07-17 16:46:47 413

原创 记录在windows环境以zip方式安装mysql

执行mysqld -install时可能会出现报错,提示缺失dll,因为mysql运行依赖visual c++库,尤其是云服务器,可能没有这些库,需要安装vcredist.exe,mysql5.7对应的是vcredist_2013的版本。安装后重新执行install命令。输入以下命令登录mysql,初始时root用户没有设置密码,提示输入密码时直接回车就行。文件,把最后一行跳过安全检查注释掉,后面登录。放到安装目录下:D:\mysql5.7。就需要输入我们修改后的密码了。以mysql5.7版本为例。

2023-06-25 15:35:40 1445

原创 uni.getSystemInfoSync().windowHeight两次调用不一致

第一次打开页面时拿到的值与第二次打开页面拿到的值不一致,我算了一下,两次值得差异就是导航栏得高度。我开始是在onLoad方法里面调用getSystemInfoSync,拿到的。getSystemInfoSync()返回的对象中有两个高度值,一个是。:小程序视图高度(除去原生的顶部和底部导航栏的高度)回调函数里面调用,就能正常拿到。

2023-06-19 16:43:45 874

原创 计算两个经纬度之间的距离

【代码】计算两个经纬度之间的距离。

2023-06-08 12:29:23 97

原创 sql语句导致jdbctemplate.batchupdate分批插入缓慢,rewriteBatchedStatements也没有用

发现了猫腻,这里的插入语句values里面又用了select max()去查询最大主键,导致每次插入都会查询主键,于是我把这里的select max去掉,发现批量插入的速度就很快了,5万数据插入只花了几秒钟。我最近项目中遇到一个jdbctemplate的batchupdate方法批量插入的问题,5万条数据分批插入,每次批量插入1000条,结果半个小时数据还没插完。经过断点调试,发现执行了第二个批量插入,但是速度还是出奇的慢,于是我开始怀疑是不是插入的sql语句有什么问题。

2023-06-03 14:24:28 1332

原创 web项目中tomcat创建文件权限不是755

这里的umask改成0022,重启下tomcat,之后tomcat创建的文件权限就是755。修改tomcat下的catalina.sh。

2023-05-26 16:26:49 356

原创 java实现innerjoin关联算法

java实现inner join关系的控制,即list1中的map和list2中map通过key值column1和column2关联,同时list1中的map和list3中map通过key值column3和column4关联。

2023-05-10 17:05:17 523 4

原创 pageoffice处理setCustomSaveResult中文乱码

pageoffice处理setCustomSaveResult中文乱码

2023-04-10 14:55:11 189

原创 Aspose.word判断两个书签区域范围是否重叠

Aspose.word判断两个书签区域范围是否重叠。在word文档中,居然可以对选中的一个区域添加多个不同名称的书签,即:多个书签可以指向同一个范围,我现在有一个书签,我需要判断得到出和这个书签范围重复和有交集的所有书签,通过以下方法可以实现:

2023-01-14 21:33:03 192

原创 java使用Aspose.word保存word更新目录页码报错、页码不对以及样式错乱解决

更新域时会更新目录,但是页码可能会有偏差,原因是无法保证域的更新顺序,目录可能不是最后一个更新的,而在更新其他域时导致页码再次发生变化。而且这个更新方法不止会更新页码,还会导致样式和更新前发生改变。在更新文档域之前,我们首先需要更新一次初始的页码,调整为正确的页码,因为文件里面原有的页码可能就是错误的,最后可能出现页码不准确的情况。注意:目录里面的每个标题,在文档中都会有一个引用, 这些引用都必须加上一个_Toc开头的隐藏书签,否则目录页码无法正常更新,手动更新目录时会出现"

2023-01-13 22:30:07 4241 8

原创 jfreechart后台生成图片采样完美解决方案以及样式美化

用jfreechart生成图片有很多问题,例如:x轴数据量多一点时,直接显示成了省略号,另外jfreechart默认的样式也是比较丑的,如下: jfreechart在画x轴标签时,会根据图片设置的宽度,和x轴坐标数计算出每个坐标占用的最大宽度,超过这个宽度,再去判断是否设置了参数:默认为0,不设置这个参数的话就不会进行换行,就会直接显示省略号。因此解决思路之一就是设置这个换行参数,或者适当增加图片宽度,可以在一定范围内解决x轴省略号的问题。但是当x轴数量太多,需要进行采样.................

2022-06-30 16:37:24 2799 2

原创 java实现list均匀采样算法

java实现list均匀采样算法,从一个List对象中均匀抽选出固定数量的样本。

2022-06-27 10:38:51 1082 2

原创 浅谈Thumbnails压缩gif图片质量的实现方式

Thumbnails压缩gif图片质量的实现方式,我们可以读取到gif的每一帧,然后对每一帧都进行压缩,最后再将压缩后的帧按顺序拼接起来,组成新的gif,原则上新的gif占用的空间会减少。然而存在一个问题,我们使用上面的代码去压缩时,由于每一帧图片大小不一致,压缩的比例也不一样,无法事先确定图片宽高,导致压缩出来的每帧的宽高都不一致,这样就导致gif没法看了。 因此我们不能将图片帧按大小压缩,而是应该直接进行缩放比例,这样也能压缩质量,保证每张图片宽高一致。...

2022-06-10 17:14:01 1772

原创 Groovy大量计算导致oom的解决办法

最近在项目中遇到一个内存持续增长的问题,系统启动后内存使用原本很低,但是在系统运行的过程中,内存一直在慢慢的增加,最后机器发出了内存预警,查看使用的内存,短短一个月居然达到了8G。经过一系列排查,发现是大量调用groovy脚本计算导致的,使用visualVM监控jvm已加载的类数量:发现每次调用脚本,都会增加一个类,问题代码: public static ScriptEngine engine = new ScriptEngineManager().getEngineByName("

2022-05-24 11:45:44 976 5

原创 mybatis-plus使用PageHelper分页存在jar包依赖冲突问题

pom.xml文件关键配置 <!--spring-jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions>

2022-05-06 14:16:02 315

原创 springboot集成mybatisplus时报Invalid bound statement错误 因为service创建了2次导致

public class Test { @Autowired private UserService userService;我在controller中注入service时,调用list方法发生如下报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.zhou.app01.sys.oa.service.UserService.getBaseMapper a..

2022-04-28 17:09:28 1653

原创 java使用ConcurrentHashMap对key进行加锁防止线程阻塞

java使用ConcurrentHashMap对key进行加锁防止线程阻塞

2022-03-23 18:05:07 3735

原创 微信小程序scroll-view设置百分比高度触发滚动事件解决方法

我在wxml文件中使用scroll-view,没有给它设置高度,让它自适应,但是一直无法触发滚动事件,我又试了设置百分比高度,还是一样无法触发,网上说是要给scroll-view一个固定高度,但是这样无法满足页面需求。经过一番研究,我发现微信小程序渲染wxml之后,有一个page标签,于是我想到之前给scroll-view设置高度为100%没有生效,可能是因为page标签没有设置高度,于是我在wxss样式文件中加了一段样式:page{ height: 100%;}然后scroll-v

2022-02-25 10:33:38 1823

原创 springboot配置https后启动报错Stream closed

我的配置:springboot版本:2.1.8springboot内置tomcat的版本:9.0.26报错信息:ERROR [org.apache.catalina.util.LifecycleBase] - Failed to start component [Connector[HTTP/1.1-443]]org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catal

2022-02-08 19:40:13 1014

原创 在线教育系统、组卷、考试

在线教育、在线组卷、题库管理、在线考试、在线批阅

2022-02-02 19:47:10 1229

原创 poi版本3.12以上添加多个批注报错的问题

添加批注的代码如下:public static void addHSSFComment(Cell cell,String value){ Comment comment = cell.getSheet().createDrawingPatriarch().createCellComment(new HSSFClientAnchor(0, 0, 0,0, (short) 3, 3, (short) 5, 6)); // 输入批注信息 comment.se

2021-01-18 14:43:20 1427

原创 mybatis使用PageHelper的bug之第一次缓存后会自己分页

最近遇到一个mybatis一级缓存的问题,使用了pagehelper分页插件,程序频繁执行一个查询sql,数据量大约200条,这个sql没有使用分页,但是在执行大约6次之后,发现这个sql返回的数据变成5条,但是在之后的一段时间里面,再执行的话也没有出现返回5条的情况,经过对pagehelper源码的追踪,我发现这个是缓存导致的。原来是因为频繁执行一个查询sql,mybatis出于性能考虑,数据量不大的话会去查询全表的数据并缓存,然后将数据分页然后返回,问题就在这儿,我程序里面根本没有分页,参数里面也没

2021-01-15 16:24:45 702 2

runc.amd64 docker内核升级到1.0.0-rc95

docker内核升级到1.0.0-rc95

2023-07-20

visual c++运行环境安装修复

visual c++运行环境安装修复

2023-06-25

java实现innerjoin关联算法

​ 场景:有三个List<Map>变量,分别为list1、list2、list3 List<Map<String,Object>> list1 = new ArrayList<>(); List<Map<String,Object>> list2 = new ArrayList<>(); List<Map<String,Object>> list3 = new ArrayList<>(); 现在需要根据一个输入的字符"list1.column1=list2.column2,list1.column3=list3.column4"(不是固定的)来实现inner join关系的控制,即list1中的map和list2中map通过key值column1和column2关联,同时list1中的map和list3中map通过key值column3和column4关联。在sql中就是"select * from list1 inner join list2 on list1.column1=list2.column2 inner join list3 on list1.column3=list

2023-05-10

Groovy大量计算导致oom的解决办法

问题原因分析:使用ScriptEngine.eval每次都会对脚本进行编译,生成一个新的类,被GroovyClassLoader加载,大量执行计算后,将导致被加载的类数量不断增加,最终OOM。 解决办法:对计算的表达式expression进行预编译,以表达式作为key,将编译好的类进行缓存,这样只会首次计算时去编译,后面再次计算时,根据expression从缓存里面取到对象,然后进行计算,不会再去创建类。 下载的资源文件中,封装了并发计算以及内存溢出解决方案的工具类GroovyEngine.java,调用示例: GroovyEngine engine = GroovyEngine.getInstance(); engine.put("a",1); engine.put("b",2); Object v1 = engine.eval("sum(a,b)");

2022-05-27

css实现侧边栏折叠小工具htmm.zip

使用css实现侧边栏折叠小工具,在经典的左右菜单布局中,点击浮动的小图标,来隐藏左边的菜单栏,实现右边区域的宽度增加。所需的css已经全部封装到css中

2020-05-16

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除