在做金融类系统处理金额数据时,double提供的精度位数有限,进行大量资产的核查清算时,容易因位数过多产生精度不够的情况。

Java的BigDecimal在这方面支持较好,可以提供任意位的精确计算,不过其效率一般,为了探究与double的性能差距,简单测了一亿次迭代情况下的加减乘除运算,进行比较,本次试验使用我的渣渣办公本,i5-2410m 4G内存。

通过测试,BigDecimal与double的性能差距在100倍这个量级,测试一亿次迭代数据,处理效率尚可在可接受范围。

结果图(单位毫秒):

BigDecimal性能
继续阅读 »

浏览:1

确实降低了开发一个符合现代架构Java Web应用的门槛,不过由于普及范围不太广,资历也还比较年轻,相关文档和Spring MVC那套比起来相当贫乏。

所以可能会趟到一些坑。

实话讲, boot开发一个Java Web应用是十分称职的,不论是做Restful API提供纯后台服务,还是使用MVC加上一些模板渲染引擎, boot都可以胜任,并能简单的、出色的完成工作。与Spring进行一大堆配置相比, boot的配置非常简单。数据连接方面, boot data组件涵盖了大多数应用场景,jpa写到飞起,默认的tomcat连接池也可满足一般需求。

我最近一个需求是进行HBase数据检索。

spring-data-hadoop的hbaseTemplate挺强大的,我初步想集成进来,不过这个组件现在Spring boot里没有办法做到简单配置,还需要写xml的配置文件并显式生效。官方现在尚无简单进行hbase集成的文档和参考案例,相关的讨论可以看这两个帖子:

http://stackoverflow.com/questions/31381615/use-hbase-with-spring-boot
http://stackoverflow.com/questions/24795097/how-to-use-hbase-with-spring-boot-using-java-instead-of-xml

不过hbase原生api使用起来也不麻烦,我要开发的这个应用十分简单,心想索性就引入原生的包直接写就好了。

所以我引入了hbase-client和hadoop-hdfs两个包,就像这样
继续阅读 »

浏览:645

jodatime依靠其方便的api和与Data无缝转换,成为java开发负责时间逻辑的不二之选。
当jodatime作为Entity的属性自动转换时,一般用到jadira.usertype

在实体类中使用jodatime需要引入jadira.usertype
自动转换有两种配置,一种是在属性上加注解:

// Will be mapped as DATETIME (on MySQL)
 
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime createTime;
 
// Will be mapped as DATE (on MySQL), i.e. only date without timestamp
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
private LocalDate birthdayDate;

一种是做全局配置
boot的app.properties配置如下:

spring.jpa.properties.jadira.usertype.autoRegisterUserTypes = true

这样在实体类中就可以直接使用jodatime的DateTime类型,在存取数据库的时候会自动完成类型转换

// Will be mapped as DATETIME (on MySQL)
private DateTime createTime;
 
// Will be mapped as DATE (on MySQL), i.e. only date without timestamp
private LocalDate birthdayDate;

不过有一个问题,当数据库保存实体时,时间少了8个小时,2016-06-20 00:00:00存到数据库中变成了2016-06-19 16:00:00,看来是丢了时区信息。
继续阅读 »

浏览:654

Jakarta Commons  3.X版本自11年之后就不再更新了,现在4.0以后的版本叫做HttpComponents

可以到这里下载 http://hc.apache.org/downloads.cgi

令人惊喜的是 HttpClient 4.2提供了连贯操作()。抛弃原来3.X版本的GetMethod、PostMethod,使得Http访问变得非常容易。

Get Request

Request.Get("http://somehost/")
        .execute().returnContent().asString();

简单一句话就可以页面内容获取到了。

如果Get有参数,可以使用URIBuilder来进行设置

URIBuilder builder = new URIBuilder();
builder.setScheme(ServerInfo.PROTOCAL).setHost(ServerInfo.HOST).setPath(path)
    .setParameter("para1", para1)
    .setParameter("para2", para2)
    .setParameter("para3", para3);

然后再进行Get
继续阅读 »

浏览:4,143
© 2017 Zhonghcc 's Blog Suffusion theme by Sayontan Sinha