标签 spring boot 下的文章

Spring Boot 集成 HBase的一些注意事项

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

所以可能会趟到一些坑。

实话讲,Spring boot开发一个Java Web应用是十分称职的,不论是做Restful API提供纯后台服务,还是使用MVC加上一些模板渲染引擎,Spring boot都可以胜任,并能简单的、出色的完成工作。与Spring进行一大堆配置相比,Spring boot的配置非常简单。数据连接方面,Spring 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两个包,就像这样

jodatime spring mvc (spring boot) 配置 解决时区问题

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;

一种是做全局配置
spring 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,看来是丢了时区信息。