logo头像

不忘初心 方得始终

java

Sping定时任务

引言在企业开发中,经常会遇到时间任务调度的需求,比如每天凌晨生成前天报表、数据汇总等动态配置是否开启定时的任务。在Java领域中,定时任务的开源工具也非常多,小到一个Timer类,大到Quartz框架。在Spring中最常见的定时任务方式属Spring schedule注解的方式和利用Quartz动态管理定时任务。总体来说,个人比较喜欢的还是Quartz,功能强大而且使用方便。 …

HttpClient后台跨域

引言跨域可以说是一个经常遇到的问题,最近在联调一个身份证识别接口,该接口由python语言编写,Java语言调用,刚开始采用了CORS(Cross-Origin Resource Sharing)跨域,在IE8上一直出现兼容性问题,固定的思维容易出现错误,自己一直想着前端Ajax跨域而忽略了后台HttpClient的跨域,最后还是用HttpClient顺利解决问题,避免了浏览器跨域带来的兼容性问题。…

JVM类加载机制

引言之前的博客说了Java虚拟机的运行时数据区域、GC算法、垃圾回收器等知识。距离深入了解还有一段距离,包括虚拟机的类加载机制、性能调优、线程并发等等还都没有涉及到,一直在看周志明的《深入理解Java虚拟机》,越深入去读发现这本书写的真的是经典,解决了自己很多的疑惑。 JVM的类加载机制。虚拟机把描述类的数据从class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 …

Java String intern方法

引言String类我们经常使用,但是它的intern()方法之前还真的不太了解,通过谷歌百度一番之后终于搞明白了。 intern()方法设计的初衷,就是重用String对象,以节省内存消耗。 …

JVM入门

引言JVM(Java Virtual Machine)Java 虚拟机是整个 Java 平台的基石,是 Java 系统实现硬件无关与操作系统无关的关键部分,是保障用户机器免于恶意代码损害的屏障。Java开发人员不需要了解JVM是如何工作的,但是,了解 JVM 有助于我们更好的开发java 程序。近些天一直在看周志明的《深入理解Java虚拟机》这本书,这本书写的堪称经典,对于JVM的学习非常有帮助。 …

Java生成PDF

引言在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同、证书等。方便用户查看,下载,打印。目前常用的解决方案是,把相关数据信息,生成对应的PDF文件返回给用户。之前有写过一篇博客关于JAVA实现HTML转PDF,不同场景下的业务不同,现在需要使用PDF生成证书,这篇博客主要介绍iText的使用。 本博客项目地址:https://github.com/mx-go/java_pdf_demo …

分布式下ID生成算法 SnowFlake

引言在做系统开发时,系统唯一ID是我们在设计一个系统的时候经常遇到的问题,也常常为这个问题纠结。生成ID的方法有很多,适应不同的场景、需求及性能要求。所以有些比较复杂的系统会有多个ID生成策略。在这里总结一下常用到的ID生成策略。…

Java备份和还原MySQL数据库

引言​ 在项目中经常会用到Java程序备份和还原MySQL数据库的内容,都是大同小异,但程序也会出现各种各样的问题(运行时异常,乱码等)。实现上都是用Runtime执行MySQL的命令行工具,然后读写IO流数据;也有可能是由于使用Java的Runtime来实现备份还原功能,而由于大家的运行时环境有差异才导致代码运行不成功。在这里记录一下自己使用的工具和方法。 …

系统中功能点的版本控制

引言​ 开发过程中我们会使用版本控制工具,如SVN、Git等。但是我们一样会遇到一种情形:在一套试题系统中,有新建题目、编辑题目、删除题目等功能,且题目可以被多个人修改,每人修改一次即是一个版本。现在的需求就是需要记录每一次修改的详细信息,每次版本之间的差异,甚至还可以版本回滚。 ​ 例如题目编号为20170919170800000061的题目被A创建,依次被B、C、D各修改了一次,此时需要比较B和A间的差异、C和B间的差异、D和C间的差异,到最后审核阶段如果B 的版本比较符合,则需要把试题版本内容回滚到B版本作为最后的版本。…

Spring+Mybatis之Mapper热部署

引言​ Spring+Mybatis经常用,在项目中最痛苦的就是修改mapper文件的时候需要重启一下项目,每修改一次就需要重启一次项目。项目小还好,如果项目大,重启一次项目简直是要命。所以,去网上查资料看有没有办法让mybatis热部署,每次更新mapper文件不需要重启项目。 ​ 功夫不负有心人,终于找到了,这玩意只要发现mapper文件被修改,就会重新加载被修改的mapper文件。且只加载被修改的mapper文件!这个可省事了,效率又高,简直爽到爆。…