利用Callable进行多线程查询数据,提高数据查询效率 前言最近在公司碰到这么一个需求,需要去1000多个数据库中统计数据,每次统计数据库中10多张表,当我们同事写出代码后,由于单线程去执行,效率有点慢,所以想出用多线程进行查询,这样以来可以提升一下查询效率。代码如下。封装线程查询类public class StatisticalUserBehaviorData implements Callable<List<Map<Stri...
Nginx重试机制导致数据库出现重复记录 前言前几天正在升级发版项目的时候,发现一个很奇葩的问题,就是用户再浏览器里执行了一次http请求,结果后端服务器执行了两遍,如果这次请求是Insert操作,可想而知,数据库会多出一条一模一样的记录来。场景还原网关用Nginx做了反向代理和负载均衡,Nginx下挂着两台阿里云ECS服务器,每台机器上都装着Tomcat,用户打开浏览器,点击页面,访问后端接口,查看Nginx的access....
组装树形结构数据功能封装 前言:由于上一篇博客只针对于实体TreeNode组装树形结构,但是实际开发中,我们对应数据表会创建很多实体来承载数据,反成不能每一种实体都需要写个递归或者循环的方法来组装数据结构吧?下面我将上一拼博客中的方法再进一步封装一下,封装成一个工具类,应对与所有的实体,但是这些实体中,必须含有HashSet类型的 children 成员变量,并生成 get set 方法;必须含有String类型的 i...
组装树形结构数据功能封装 前言:由于上一篇博客只针对于实体TreeNode组装树形结构,但是实际开发中,我们对应数据表会创建很多实体来承载数据,反成不能每一种实体都需要写个递归或者循环的方法来组装数据结构吧?下面我将上一拼博客中的方法再进一步封装一下,封装成一个工具类,应对与所有的实体,但是这些实体中,必须含有HashSet类型的 children 成员变量,并生成 get set 方法;必须含有String类型的 i...
组装树形结构数据,子节点去重! TreeNode实体public class TreeNode { private String id; private String parentId; private HashSet&amp;lt;TreeNode&amp;gt; children; public TreeNode(String id, String parentId) { th...
git 撤销命令、版本恢复命令 前言在使用git的时候难免手贱,有时候想撤销本地的修改,也就是工作区的修改,有时候想撤销暂存区的修改,有时候甚至想恢复某个版本。下面我简单的总结一下撤销和恢复版本的命令。1、撤销工作区的修改 1.1、`git checkout &amp;lt;fileName&amp;gt; 譬如:git checkout MyController.java` 1.2、说明:这个命令就是让这个...
用泛型和反射给List中的数据排序 前言最近优化项目代码时,发现了很多重复的代码,都是给List中的数据做排序,只是List中存放的数据类型不一样,但是这些数据都有一个共同点,那就是里面的数据都有date字段和orderNum字段,例如,TestVo中就有date、orderNum等成员变量,OrderVo中也有date、orderNum成员变量,现在需要将List&amp;amp;lt;TestVo&amp;amp;gt; List&amp;amp;lt;orderVo...
使用HttpURLConnection下载网络文件 前言:最近产品经理要分析用户的行为数据,于是让我将生产上的数据包都下载下来,用HttpURLConnection和Java的IO流,挺方便,下面简单介绍一下。下载代码public static void testDownLoad(){ BufferedInputStream bis =null; BufferedOutputStream bos...
JVM内存分析 前言前些日子小编接到一个新活,生产环境的服务器内存经常爆满,还没有用多长时间了,内存就剩不下多少了,经理于是让我分析了一下JVM内存,找一找哪个对象占用内存大,有没有内存泄露的地方,以及哪个线程占用资源多等等。使用Jmap在线上分析首先,小编用jvm自带的工具jmap查了一下tomcat分配堆栈内存的一些信息。检查一下堆中老年代和新生代的使用情况,排查一下是否是分配的内存过少导致。过程如下1
redis中的maxmemory 前言当redis中的存储数据的容量达到最大时,若果我们再往里面存储数据,redis在默认的配置下会抛出异常,那么当mem_used内存已经超过maxmemory,我们采取的措施是什么哪?清理策略1.volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放。2.allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据
深入理解回调函数的使用 前言回调函数在框架中的使用是家常便饭,无论是前台框架还是后台框架,譬如,Jquery的Aajax函数就封装了回调的功能,Spring在整合Hibernate的时候也封装了回调的功能,那为什么要有回调那?回调函数到底有什么作用那?小编谈一下自己的见解。回调函数的作用为什么设置回调函数,这个问题困扰了好长一段时间,小编看了一些框架的源码后才恍然大明白,回调函数的作用。读者不用着急,先跟着我看个JS
Java中的并发工具类--CyclicBarrie 需求三个子线程,每个子线程执行N个不同的任务,但是这三个子线程分别执行完第N-1个任务后,三个子线程的第N个任务需要同时执行,此时,CyclicBarrie就派上用场了。具体代码public class UseCyclicBarrier { static class Runner implements Runnable { private CyclicBarrier bar
jdk1.7与jdk1.8切换问题 前言在做不同的java项目时候,很可能来回切换jdk,由于小编的jdk1.7是安装版的,jdk1.8是绿色版的,当做不同的项目时候,就来回切换jdk了,遇到了一下问题。遇到的问题修改环境变量JAVA_HOME后,jdk还是切换不会来问题原因当系统安装jdk1.7后,系统默认会在C:\Windows\System32创建java.exe、javaw.exe和java
java.io.IOException: invalid constant type: 15 小编最近将jdk1.7升级到jdk1.8后,当运行旧项目时,启动spring加载bean的时候报运行时异常,还以为spring哪配置出错了,检查了一遍发现没错,结果是jar版本问题,于是修改pom.xml文件,更新javassist的版本从3.15.0到3.18.2,此错误消失。<dependency><groupId>org.javassist</groupId><artifactId>ja
Dubbox 构建Restful服务 Facade@Path("/sysUserService")@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})@Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})public interface SysUserFacade {
Json Web Token Json Web token简介Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519),该token被设计为紧凑且安全的,JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。JWT
《Shiro+Json Web Token》----用多线程优化登录 前言:在最近这个权限框架中,小编发现登录很慢,因为是框架启动后第一次登录,需要创建很多对象还有打通额外的链接,所以很慢,但是第二次登录就明显的快了。于是打开项目的源码,开始优化起来,在了解完大体的业务逻辑后,感觉能用上多线程,于是就测试了一下,发现挺管用,小编将经验分享给大家吧!使用的技术点SSMShiroJson Web TokenRedis登录的逻辑用户输入用户名和密码发送给后端
windows环境下,点击tomcat的startup.bat闪退问题 前言最近在本地测试项目的时候,小编在本地解压了三个tomcat,需要将三个tomcat同时运行,可是当点击bin目录下的startup.bat时,黑框框出现闪退问题,以下是问题解决方案。更改端口号由于要同时运行三个tomcat,每个tomcat要运行在不同的端口上,所以要更改默认的配置文件-server.xml,这个配置文件在conf目录下面,更改的地方有一下几点。 1、<Server por
《权限系列shiro+cas》----cas登录原理 前言这篇博客小编只是贴了两个cas官网上的两个原图,这两个图对于理解cas的单点登录很有帮助。不使用代理的登录时序图使用代理的登录时序图小结这两张图展示了cas的登录原理,里面用到了很多专业术语,有TGT,ST等等,将cas的登录原理总结成一句话,就是几个cookie和几个session之间的关系。