
java
朱小厮
你知道的越多 你不知道的也就越多
展开
-
Mybatis SQL拦截器实现
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。主要功能:通过log4j配置mybatis的打印,只能输出到控制台,而并非真正能够实现sql的获取,本文主要通过拦截器实现sql的拦截,进而对sql进行相应的操作。起因:因项目需要,服务器要配成双机热备,那么数据库(这里采用的是MySQL)也是...原创 2015-08-27 16:41:28 · 9516 阅读 · 0 评论 -
Java中this()和super()的注意点
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。使用super和this应该注意这些:1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。2)...原创 2015-09-01 09:25:08 · 8362 阅读 · 0 评论 -
Java中由substring方法引发的内存泄漏
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 在Java中我们无须关心内存的释放,JVM提供了内存管理机制,有垃圾回收器帮助回收不需要的对象。但实际中一些不当的使用仍然会导致一系列的内存问题,常见的就是内存泄漏和内存溢出内存溢出(out of memory ) :通俗的说就是内存不够用了,...转载 2015-08-19 16:22:03 · 2634 阅读 · 1 评论 -
Java 程序优化:字符串操作、基本运算方法等优化策略
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 字符串操作优化字符串对象字符串对象或者其等价对象 (如 char 数组),在内存中总是占据最大的空间块,因此如何高效地处理字符串,是提高系统整体性能的关键。String 对象可以认为是 char 数组的延伸和进一步封装,它主要由 3 部...转载 2015-08-19 16:40:57 · 2820 阅读 · 3 评论 -
SpringMVC + Apache POI 实现WEB中Excel下载功能
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。项目中需要将web页面中的报表导出成Excel,在网上搜寻了写资料,实现了相关功能,如图1所示:项目后台架构采用的是SpringMVC+Spring+Mybatis,通过引入Apache POI实现excel的下载功能。导出效果如...原创 2015-09-17 16:48:19 · 7311 阅读 · 5 评论 -
使用VMware VSphere WebService SDK进行开发 (四)——获取集群(Cluster, ComputeResource)的相关信息
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。获取集群的信息不再过多的赘述,详细读过前面两篇文章的读者已经很快上路子了~疯狂罗列代码: private static TraversalSpec getComputeResourceTraversalSpec() { Sel...原创 2015-11-11 15:38:06 · 7529 阅读 · 1 评论 -
使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。通过前面两篇文章的了解,详细应该很快掌握的code路数,这里首先罗列如何获取主机(接下去也会成为HostSystem)的对象。 private static TraversalSpec getHostSystemTraversalSpe...原创 2015-11-11 15:27:29 · 9537 阅读 · 3 评论 -
使用VMware VSphere WebService SDK进行开发 (二)——获取虚拟机cpu的使用情况
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。本文通过代码举例虚拟机cpu的使用情况来演示如何遍历搜寻VirtualMachine的对象,以及根据这个对象进行性能指标的见识。希望可以取到举一反三的效果。首先下面先罗列出如何更具虚拟机的名称获得VirtualMachine的ManagedOb...原创 2015-11-11 14:20:15 · 13350 阅读 · 24 评论 -
使用VMware VSphere WebService SDK进行开发 (五)——根据虚拟机的名称获取对应主机的IP地址
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。在整个获取监视信息的过程中,最难获取的就是根据虚拟机的名称获得对应主机的IP地址的功能。(个人觉得比较绕,绕了好久我才找到)首先根据虚拟机的名称获得对应主机(HostSystem)的ManagedObjectReference对象。...原创 2015-11-11 15:48:56 · 8101 阅读 · 14 评论 -
使用VMware VSphere WebService SDK进行开发 (六)——检测告警信息
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。获取告警信息相对而言比较简单点,这里先陈述告警信息的pojo类,作为存储告警信息的源头(省略getter和setter方法):public class AlarmItem{ //对象 private String ObjectNa...原创 2015-11-11 16:01:28 · 7676 阅读 · 3 评论 -
Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。在小型项目中,一般配置一个数据库,也就是一个mybatis数据源,但是有时候需要同时支持两种数据库,比如mysql和oracle. 最笨的方法就是配置两个spring配置文件,然后根据不同的部署,采用不同的配置文件,其实这两个配置文件可以合成...原创 2015-11-20 09:42:32 · 17208 阅读 · 1 评论 -
Spring+Mybatis多数据源配置(四)——AbstractRoutingDataSource实现数据源动态切换
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。有时候需要在程序中动态切换数据源,那么这个系列的之前的博文所阐述的方法就不再使用了,总不能通过程序更改config.properties文件的dataSource的值,然后再重启web服务器以便加载applicationContext.xml文件。...原创 2015-11-20 17:26:13 · 12957 阅读 · 9 评论 -
Spring+Mybatis多数据源配置(三)——Spring如何获取Properties文件的信息
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。严格来说,本博文所阐述的内容和这个系列来说,没有什么必要的关系,本博文的主题是:如何使用spring获取properties文件的信息。本博文所采用的用例都和这个系列有关,所以就放在这里讲了。通过spring的配置(applicationCon...原创 2015-11-20 15:47:54 · 7284 阅读 · 0 评论 -
使用VMware VSphere WebService SDK进行开发 (七)——获取数据中心、集群、主机、虚拟机的目录结构
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。在实际应用中,需要显示出数据中心(Datacenter)、集群(ClusterComputeResource)、主机(HostSystem)、虚拟机(VirtualMachine)之间的目录关系。这里忽略VAPP以及APP。正所谓无图无真相,先...原创 2015-11-18 17:32:32 · 7756 阅读 · 4 评论 -
Spring+Mybatis多数据源配置(二)——databaseIdProvider的使用
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。在上一篇同系列的博文中,讲到配置多数据源,然后根据config.properties配置不同的数据库,进行切换。而且需要根据不同的数据库,配置不同的mybatis sql映射配置文件,如下: <property n...原创 2015-11-20 15:00:14 · 13971 阅读 · 7 评论 -
JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境中,线程抛出的异常是不能用try....catch捕获的,这样就有可能导致一些问题的出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的...原创 2015-12-28 11:29:44 · 40383 阅读 · 17 评论 -
JAVA虚拟机关闭钩子(Shutdown Hook)
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。JDK提供了Java.Runtime.addShutdownHoo...原创 2015-12-24 15:48:54 · 38340 阅读 · 10 评论 -
Java守护线程概述
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)。只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemo...原创 2015-12-24 09:46:01 · 9717 阅读 · 1 评论 -
MySql数据库连接超时处理
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。博主在做web开发时遇到MySql数据库连接超时的问题。控制台报错如下:Request processing failed; nested exception is org.springframework.transaction.Canno...原创 2015-12-22 08:55:33 · 12398 阅读 · 1 评论 -
Java中如何遍历Map对象
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。博主有时会忘记如何遍历Map对象,这次在这里做一下总结。博主采用的是JDK7,先看一下JDK7中Map接口的定义。java.utilInterface Map<K,V> 类型参数: K - the type...原创 2015-12-14 15:04:12 · 12482 阅读 · 1 评论 -
SpringMVC中@ResponseBody的相关注意点
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。博主习惯性用SpringMVC的@ResponseBody注解返回JSON字符串,原先采用的方法是GSON将对象转换成json字符串。(需要引入gson-2.x.x.jar的jar包) @ResponseBody @Reques...原创 2015-12-09 15:05:29 · 11079 阅读 · 0 评论 -
JAVA线程间协作:Condition
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 内置条件队列存在一些缺陷。每个内置锁都只能有一个相关联的条件队列,因而在像BounderBuffer这种类中,多个线程可能在同一个条件队列上等待不同的条件谓词,并且在最常见的加锁模式下公开条件队列对象。这些因素都使得无法满足在使用notif...原创 2016-01-01 16:30:54 · 6085 阅读 · 0 评论 -
如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。在 Java 中可以用 wait、notify 和 notifyAll 来实现...转载 2015-08-19 15:51:20 · 7541 阅读 · 10 评论 -
Java枚举类型enum
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。枚举的语法1.Enum的全称为enumeration,中文俗称枚举类,学过C/C++等语言的人,应该都对它略知一二。 但在Java语言规范中,是在JDK 5版本中才引入的,存放在 java.lang 包中。在Java版的Enum实质是语法...原创 2016-01-22 16:44:08 · 11999 阅读 · 2 评论 -
JAVA通信编程(二)——如何读取java的properties配置文件(插播)
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。如何读取java的properties配置文件本不属于java通讯编程这个系列的范畴,但是在做一些应用中编写通讯编程需要读取一些通讯参数,这样可以使程序更加的通用化。并且博主在读取properties文件中遇到了点小坑,在这里说明一下,防止各位读者...原创 2015-12-05 11:11:38 · 3689 阅读 · 0 评论 -
如何用shell脚本编译java工程
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 编译java工程一般直接用IDE或者用Ant、Maven之类的工具,很少有人用纯shell来编译java工程。正好遇到这样一个应该,用这篇博文做一下记录。 案例:本人用eclipse写了一个java project,然后编译打成ja...原创 2016-01-06 17:30:58 · 8827 阅读 · 0 评论 -
JAVA通信编程(一)——串口通讯
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 博主结合实际经验,决定总结下JAVA通讯编程的一些小知识,希望能给给位读者有些帮助。这里的JAVA通讯编程主要是指如何应用JAVA编写串口、TCP以及UDP的通讯程序。本片主要讲述的是串口通讯。 本人所知的java串口通讯可以采用两种方...原创 2015-12-04 17:54:33 · 7551 阅读 · 1 评论 -
JAVA序列化
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。什么情况下需要序列化 当你想把的内存中的对象保存到...原创 2016-01-07 10:50:12 · 11096 阅读 · 0 评论 -
JAVA通信编程(三)——TCP通讯
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。继上一篇小插曲之后继续回到正题,本篇讲述的是java的TCP通讯。TCP编程分为server端和client端,一般在网上都能搜到相关的例子,为了方便大家,我这里先整理下server端和client端的应用案例,然后再根据在本系列中第一篇串口...原创 2015-12-05 15:57:23 · 5819 阅读 · 0 评论 -
JAVA通信编程(四)——UDP通讯
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。经过TCP和串口通讯编程的了解,相信大家应该掌握CommBuff的套路了,这里首先展示的是通过UDP编程的方式实现CommBuff接口,之后通过简单工厂模式的应用说明如何屏蔽底层通讯差异。UdpImpl类如下:package com...原创 2015-12-05 16:29:56 · 4226 阅读 · 4 评论 -
使用VMware VSphere WebService SDK进行开发 (一)——基本信息阐述
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。网上对于VSphere WebService SDK的介绍比较少(至少我能查到的资料比较少),官方提供的也是英文版的api,而且没有注明使用方法。最近接触到关于VSphere WebService SDK的开发,刚开始也是烦躁,比如要获取一个cpu...原创 2015-11-11 10:54:41 · 25670 阅读 · 33 评论 -
JAVA通信编程(五)——串口通讯的补充说明
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 在《JAVA通讯编程(一)——串口通讯》中讲述了如何采用JAVA进行串口通讯,我们采用的是引入RXTXComm.jar的方式,关于这个我有两点需要说明补充。首先,现在的笔记本一般都不带串口,需要usb转串口之类的工具才能进行通讯,这样对调试程序...原创 2015-12-08 10:04:46 · 4769 阅读 · 0 评论 -
Cookie 和 Session机制详解
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 原文地址:http://blog.youkuaiyun.com/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与S...转载 2016-01-12 18:42:22 · 7278 阅读 · 1 评论 -
看图
.原创 2016-01-05 15:52:21 · 4208 阅读 · 6 评论 -
如何防止单例模式被JAVA反射攻击
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 单例模式相信大家都知道,用过的人不在少数。之前写过一篇博文《singleton模式四种线程安全的实现》(参见:http://blog.youkuaiyun.com/u013256816/article/details/50427061),讲诉了单例模式...原创 2016-01-15 18:29:00 · 18869 阅读 · 19 评论 -
singleton模式四种线程安全的实现
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 1.描述: Singleton(单例)是设计模式的一种,为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.主要特点: 1)单例类确保自己只有一个实例(构造函数私有:不被外部实例化,也不被继承)。...转载 2015-12-29 15:30:43 · 17385 阅读 · 5 评论 -
JAVA运行时异常及检查式异常
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。java运行时异常是可能在java虚拟机正常工作时抛出的异常。java提供了两种异常机制。一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption)。检查式异常:我们经常遇到的IO异常及sq...原创 2015-08-19 12:24:47 · 4525 阅读 · 1 评论 -
JAVA多线程之扩展ThreadPoolExecutor
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。ThreadPoolExecutor是可扩展的,通过查看源码可以发现,它提供了几个可以在子类化中改写的方法:beforeExecute,afterExecute,terminated.源码片段如下所示:protected void ...原创 2015-12-25 16:28:39 · 12415 阅读 · 9 评论 -
JAVA线程间协作:wait.notify.notifyAll
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程...原创 2015-12-31 10:39:13 · 8481 阅读 · 7 评论 -
如何使用JMX监控Kafka
使用kafka做消息队列中间件时,为了实时监控其性能时,免不了要使用jmx调取kafka broker的内部数据,不管是自己重新做一个kafka集群的监控系统,还是使用一些开源的产品,比如yahoo的kafka manager, 其都需要使用jmx来监控一些敏感的数据。在kafka官网中 http://kafka.apache.org/082/documentation.html#monitori...原创 2016-12-08 21:16:44 · 50711 阅读 · 4 评论