Calendar类的getActualMaximum方法作用(获得某月份实际天数)

发表于3年前(Dec 24, 2014 2:14:56 PM)  阅读 948  评论 0

分类: Java

标签: Calendar getActualMaximum 月份天数

首先我们看api中对getActualMaximum这个方法的说明:

Calendar (Java 2 Platform SE 6)
public int getActualMaximum(int field)

给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。例如,在某些年份中,MONTH 字段的实际最大值是 12,而在希伯来日历系统的其他年份中,该字段的实际最大值是 13。此方法的默认实现使用了

......

SimpleDateFormat日期格式化的线程安全问题

发表于3年前(Dec 24, 2014 2:11:34 PM)  阅读 1126  评论 0

分类: Java

标签: multiple points SimpleDateFormat ThreadLocal 线程安全

写过几个java项目的人应该都熟悉SimpleDateFormat这个工具类,这是处理日期最常用的类.数据库里面对于日期的保存,常见的是直接保存日期或者是字符,这两者孰劣孰优看情况而定,还有一种少见的是直接保存秒数(这个秒数表示当前时间离1970年1月1日相差的秒数),而需求要求展示的时间格式很多,所以就经常需要转换。我们经常使用他来将日期转为字符,也用来将字符转为日期。

SimpleDateFormat使用的很多,但是笔者相信很多人不知道他是线程不安全的,好吧,笔者也是做了几年程序员以后才发现的,所以这次笔者在更新检查项目组代码的时候,立马发现了这个问题,再次得到了验证,果然是几年老程序员也会犯的错误。

Thrift序列化框架的使用

发表于3年前(Dec 24, 2014 2:08:54 PM)  阅读 1177  评论 0

分类: Java

标签: thrift 序列化

1、Thrift是什么:
Thrift是一个序列化框架,可以用来进行跨语言的服务开发,进行跨平台的RPC通信,最初由Facebook开发。 类似的产品还有google使用的protobuf,以及Kryo,据说Kryo速度更快,当然代价是摒弃了其他一些特性,如果对性能方面要求苛刻的,可以考虑研究下Kryo。

2、Thrift工作原理:
a、首先我们要开发一个Thrift服务段,绑定端口,注册接口服务。开发服务端要编写Thrift IDL文件,IDL即接口定义文件,一般包含两种形式,一种为service类型,用来对外提供接口服务,一种为struct类型,就是我们常用的java bean,用来传输对象数据。根据IDL文件生成相应平台的代码,并对接口进行实现,然后启动服务接口,等待客户端连接。
b、 复制服务端的接口定义生成的代码,也可以由对应的IDL自行生成。连接指定的服务器IP、端口,按照接口规范进行调用。

3、Thrift IDL:

......

一种文件锁的使用场景

发表于3年前(Dec 24, 2014 2:05:27 PM)  阅读 902  评论 0

分类: Java

标签: getChannel OverlappingFileLockException RandomAccessFile

1、什么叫文件锁:
按笔者的意思理解,文件锁就是把某个文件锁定,除了当前进程能访问外,别的进程不能访问该文件。细而划分又有读锁和写锁, 读锁又名共享锁,它用来防止进程读取的文件记录被更改。文件记录可以同时设置多个读锁,但当有一个读锁存在时,就不能在该记录出设置写锁。写锁又名互斥锁,它用来保证文件更改记录时不被干扰,确保文件一致性和完整性,防止写丢失或读”脏”数据。文件记录一旦设置了写锁,就不能再设置任意锁,除非写锁释放。文件记录在同一时刻,可以设置多个读锁,单仅能设置一个写锁,并且读、写不能同时存在。

2、文件锁的使用场景:
文件锁的典型使用场景是pid文件,用于防止进程启动多个副本。只有获得 pid 文件写入权限的进程才能正常启动,并把自身的 pid 写入该文件中。常见的开源软件很多都使用文件锁,如nginx,apach,memcached等。笔者也是基于java工程的Thrift服务,想到正好可以使用文件锁来解决启动多个服务的问题。

3、文件锁的一种java实现:

......

json工具jackson使用

发表于3年前(Dec 24, 2014 2:03:57 PM)  阅读 544  评论 0

分类: Java

标签: jackson json

1、jackson是什么:
jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。

2、什么时候会用到jackson:
这有点废话了,自然是处理json格式数据的时候用到。一般web应用,前台页面和后台会采用json对象用来传递数据,这时候就可以使用json;同时,接口之间传输数据也可以使用json,比起使用传统的XML的好处就不用多说了,最近使用一次jackson正是因为笔者大数据平台对外提供接口设计返回json串。接口采用thrift提供服务,thrift本身支持直接传递对象,但对实体类侵入性太大,不实用,所以笔者大部分时候都是提供json串,供其他平台自己解析。

3、我们可以用jackson来做什么:
在web应用中可以实用jackson将java对象(普通vo,集合list)转化成json串,前台页面实用js代码还原对象数据;调用第三方接口返回的数据是json串时,可以使用jackson将json串还原成java对象。

4、工具类示例:

......

安装WPS引发的excel上传问题

发表于3年前(Dec 24, 2014 1:58:56 PM)  阅读 516  评论 0

分类: Java

标签: application/kset Content-Type not allowed

一、问题场景:
前阵开发一个报表功能,功能简单描述为上传一个excel文件,读取里面已有的内容,进行一些查询操作,填充一些数据进去返回给用户下载。系统里已有类似功能,笔者使用之前的上传模块,发现文件不能上传成功,一闪即过,测试以前别人做的功能也是一样,后使用别人机器访问我机器上应用,发现有些人可以,有些人不行,跟个人机器有关。

二、问题分析:

1、首先对多台机器访问同一台应用进行测试,测试结果不一样,每台机器结果是稳定不变的,所以排除服务器配置问题(开始认为)。

2、对多个浏览器进行测试,排除浏览器兼容性问题。检查浏览器设置,未发现特别配置选项,机器或浏览器个性化配置存在可能性问题。

3、检查后台发现如下日志:
Feb 24, 2014 11:11:30 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
INFO: Unable to find ‘struts.mu

......

处理大数据量报表导出

发表于3年前(Dec 24, 2014 1:58:12 PM)  阅读 1031  评论 0

分类: Java 案例

标签: poi 大数据导出

一、问题场景:

报表导出功能是很多系统常见的,java报表导出常用poi,jxl等jar包,笔者常用的是poi。使用这些开源jar包导出excel都很简单,网上随机找个例子就能用,可是一旦碰到导出的数据量很大的时候就出问题了。项目中有个报表导出功能,如果不选条件,可以将所有数据进行导出,现有数据量有20w,客户不愿分批导出,导出过程中经常报错,无法正常完成,笔者接手处理该问题。

二、问题分析:

1、查看代码,所有数据直接从数据库load进来,组成java实体,在开发库测试,开发库上只有3w多数据,就已经报内存溢出了,这是一个问题。

2、解决完这个问题后使用poi进行excel写入操作时,同样会报内存溢出,这时使用的是poi3.7,用的HSSFWorkbook。

3、excel本身有限制2003 是65536行,2007是1048576行。

三、解决问题:

1、首先所有数据load到内存中的做法肯定是不对的,内存再大总有限制,数据量一直在增长,

......

BeanDefinitionStoreException: Failed to read candidate component class

发表于3年前(Dec 24, 2014 1:57:19 PM)  阅读 15039  评论 1

分类: 开发运维环境

标签: BeanDefinitionStoreException Failed to read candidate component class

weblogic服务器启动报出如下错误(模板有点难看,请查看源代码或者复制出来看):

ERROR(02/14 09:46:13)[ContextLoader.java:238]-Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/*/*/WEB-INF/classes/../*.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 8
        at org.springframework.context.ann
......

OpenSessionInViewFilter FlushMode设置

发表于3年前(Dec 24, 2014 1:53:54 PM)  阅读 696  评论 0

分类: Java

标签: FlushMode InvalidDataAccessApiUsageException java.lang.NoSuchMethodException: org.hibernate.FlushMode.java.lang.String No String constructor found on type [org.hibernate.FlushMode] OpenSessionInViewFilter Write operations are not allowed in read-only mode

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter是Spring提供的filter,用来保持session不关闭,使我们在前台页面可以获取延迟加载的数据。但是如果使用OpenSessionInViewFilter,在前台页面创建实体,进行持久化时,经常会出现如下错误:
org.springframework.dao.InvalidDataAccessApiUsageException:
Write op

......

Java创建ZIP压缩文件

发表于3年前(Dec 24, 2014 1:52:29 PM)  阅读 358  评论 0

分类: Java

标签: java压缩 ZipEn ZipOutputStream

java.util.zip下面有个ZipOutputStream类,使用这个类,我们可以创建一个ZIP压缩文件。见示例代码:

import java.io.File;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class TestZip {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		ZipOutputStream zos = new ZipOutputStrea
......