使用Jackson生成和解析JSON

Jackson是目前使用非常广泛的JSON生成和解析工具。

Jackson项目主要由三个模块儿组成:

  • jackson-core 提供了一套流式API,他不仅自带了JSON的解析器和生成器,还支持扩展数据格式,比如XMLCSVProtobuf
  • jackson-annotations 提供了处理数据时需要的注解
  • jackson-databind 可以将数据和Java对象进行绑定,使用起来更方便、更符合直觉

通常来说,我们提到Jackson的时候,指的就是jackson-databind,他直接依赖了jackson-core和jackson-annotations。我们用Jackson的时候,通常也只是用来处理JSON,其他数据格式可以参考官网进行扩展。

(更多…)

继续阅读 →

用属性控制Hibernate生成DDL

Hiberate可以根据我们定义的@Entity实体类,来自动生成表结构,在一定程度上,你不需要与SQL打交道。在Spring Boot配合Hibernate使用的时候,可以定义属性来控制这种行为。如图所示:

可用的一些属性值
  • create表示每次应用启动的时候,都会将之前的表全部drop掉,重新根据实体类生成一遍。
  • create-drop在create的基础上,在应用关闭的时候还会drop一次。
  • update可能是比较常用的,每次启动的时候会看看实体类有什么变化,然后看需不需要更改表结构。
  • validate不会对表进行更改,但是会看看他和实体类是否对应
  • none什么都不做

除了这个属性之外,Spring Boot还有另外一个属性:

(更多…)

继续阅读 →

Oracle如何对JDK收费

今年4月16日,Oracle发布了新的JDK 8的更新,版本号为8u211和8u212。与以往不同的是,新版本的许可协议从BCL换成了OTN,这就意味着,你不能在生产环境使用这个版本了。如果你想继续使用8u211/8u212,或者之后发布的新版本,就需要给Oracle交钱了。

当然,并不是你用了新版本的JDK就要交钱,这个时候要区分私用和商用:

私用,是我总结的一个词,它包括”Personal Use”和”Development Use”,前者表示一些个人用途,比方说在自己的电脑上写一些小工具,做一些数据分析等等;后者表示开发用途,比如日常开发、做测试、做演示等等。商用不太好界定。我的理解就是拿来赚钱就是商用,比方说把网站部署到生产环境,在公司内部系统使用等。

我用的JDK使用什么协议?

BCL协议,即Oracle Binary Code License Agreement,协议规定你可以使用JDK,但是不能进行修改。私用和商用都可以,但是JDK中的某些商业特性,是需要付费才可以使用的。OTN协议,即Oracle Technology Network License Agreement,目前新发布的JDK用的都是这个协议,可以私用,商用需要付费。从下图可以看出各个版本对应的协议:

(更多…)

继续阅读 →

Spring Boot为什么不推荐使用JSP?

如果你在网上搜Spring Boot的教程,会发现模板引擎清一色用的Thymeleaf,为什么很少人用JSP?因为Spring Boot官方已经不推荐使用JSP了,文档中原话这么说的:

If possible, JSPs should be avoided. There are several known limitations when using them with embedded servlet containers.

Spring Boot 文档

在内置servlet容器中运行的时候,JSP会有一些限制:

  • 我们知道Spring Boot的打包方式有两种,一种jar包,一种war包。两种打包方式可以通过命令java -jar dist.jar或者java -jar dist.war运行。war包也可以单独部署在独立的Servlet容器(比如Tomcat,Jetty)中。使用jar包的时候不支持JSP,使用war包的时候支持
  • Undertow不支持JSP,话说Undertow国内用的比较少吧
  • 自定义的error.jsp不会覆盖Spring Boot默认的错误处理页面

既然如此,你如果需要使用JSP,就得打成war包,官方的代码仓库中自带有使用JSP的样例。当你需要迁移老项目到Spring Boot的时候,肯定会派上用场。

对于新项目,我的建议是你喜欢用哪个模板引擎,就用哪个。如果没有熟悉的,那就把FreeMarker、Groovy、Thymeleaf和Mustache全都看一遍,选择最合适的。

继续阅读 →

Spring Boot要不要搞?

最近抽空学写了下Spring Boot,它旨在简化Java应用的开发。利用自动配置的特性,你可以少写很多配置代码,利用COC(Convention Over Configuration),你可以直接上手,快速投入到你业务的开发过程中。

刚开始听说Spring Boot的时候,我是拒绝的。最早学习Spring,是通过《Spring实战(第四版)》开始的,这本书覆盖了Spring开发的方方面面,是一本极好的入门书籍。然后我还写了个模板项目,配置好了一些常用的东西,比如第三方库、数据库配置、资源路径等等。当我以为自己算是踏入Java Web开发的大门的时候,发现我在github找的一些开源项目都是使用的Spring Boot,而且拉勾上很多职位都对SB有要求(说明已经被广泛应用了),再加上Spring Cloud是基于Spring Boot的,我决定上手试一试。

(更多…)

继续阅读 →

Actuator不支持Gson?

Spring Boot提供了Actuator,用来监控和管理运行中的系统,添加一句依赖之后,就可以在/actuator/health和/actuator/info下查看信息了。

Gson是谷歌提供的一个json类库,作为一个Android开发,自然是选择用他。Spring Boot是支持Gson的,只需要在build.gradle添加一句依赖,在application.properties添加一句配置就可以用了。

然而,他俩同时用会出问题。Actuator为了安全,默认的暴露出来的路径很少,只有上面说到的两个,其实有用的信息还有很多,可以通过配置将所有的路径都打开。当我想通过/actuator/beans查看所有的bean的时候,报错了,提示缺少type adapter。

(更多…)

继续阅读 →