Spring Boot教程(10) – 错误处理

如果你使用Spring Initializr新建一个web项目,运行并访问他的话,因为没有写控制器,你会得到一个错误页面,告诉你请求路径没找到(404错误):

页面标题为“Whitelabel Error Page”,直译为“白标错误页”,啥是白标,知乎上我搜到了这个答案:

White Label 意思是你开发了一个产品,而这个产品可以根据其他不同公司的品牌形象(品牌logo,品牌颜色,图片等等)包装成该公司自身的产品。

Gary Ma

我觉着吧,“白标错误页”的意思就是这个错误页面是个样板,你可以根据自己的需求自定义错误页面样式。

(更多…)

继续阅读 →

Spring Boot教程(9) – Model的用法

你一定知道Model类,在控制器中,数据会存放到Model对象中,当需要生成HTML的时候,模板引擎会根据名字来定位数据,向下图这样。

从广义上来说,Model指的是MVC中的M,即Model(模型)。从狭义上讲,Model就是个key-value集合。实际上,上图home方法得到的model对象就是一个 java.util.Map ,你可以将Model类型替换为Map<String, Object> ,或者ModelMap——一个实现了Model接口的java.util.HashMap

(更多…)

继续阅读 →

Spring Boot教程(5) – 模板引擎

模板引擎,是用来生成动态网页内容的,一旦控制器(Controller)收集了足够的数据,就会把数据交给模板引擎来处理,模板引擎根据数据生成HTML,返回给浏览器。

Spring Boot支持多种模板引擎(可以自动配置),包括FreeMarkerThymeleafMustacheGroovy Templates。你可能也知道JSP,被很多人认为是过时的技术,虽然他仍然可以完成你大部分的需求,也可以在Spring Boot中使用,但是已经不被推荐了,具体你可以参考 为什么Spring Boot不推荐使用JSP? 。Thymeleaf现在被很多人采用,他的特点就是可以直接在浏览器中打开模板文件,方便前端开发。FreeMarker使用FreeMarker模板语言(ftl),跟使用JSP或者PHP的感觉有点相似,但是他并不是通用语言,只专注于在模板中展示数据。Mustache和Groovy Templates一句话两句话说不太清楚,大家看看例子就好。

(更多…)

继续阅读 →

Spring Boot教程(4) – 依赖管理

不管你熟悉不熟悉Gradle,build.gradle文件中的内容都是要去重新认识的。

上图是一个典型的,刚刚生成的build.gradle文件,添加了个Guava依赖。repositories{ mavenCentral() } 这段代码表示我们的依赖都是从中央仓库下载的。 比如这个Guava库,implementation后面跟上库的坐标就可以引入 ,之前我们说过,坐标由 groupId:artifactId:version 组成。奇怪的是,上面列出的第一个依赖,却没有版本号。因为这个版本号是由一个插件管着的,插件叫做 io.spring.dependency-management。

说到这儿,又要牵扯出很多东西了,容我深吸一口气。

(更多…)

继续阅读 →

Spring Boot教程(3) – 运行第一个项目

把项目运行起来是极具成就感的事情,不管是在学习新语言还是新框架的过程中。上一篇文章说明了如何使用Spring Initializr和IDE来创建项目,下面就看看项目能不能跑起来,我们通过IDE和命令行,直观地理解框架的作用。

先来一张IntelliJ IDEA的截图,为项目刚创建时候的状态。左侧为项目目录区,右侧为代码区。左边,右边和下边都有工具栏,你可以打开终端,可以查看类结构,可以查看Build时候的信息,可以查看运行时候的信息,可以查看Gradle和Maven的依赖以及任务,可以连接数据库,可以查看Spring相关的东西比如各种Bean及其关联等等。界面最上方是文件的目录以及运行相关的按钮。

(更多…)

继续阅读 →

Spring Boot教程(2) – 创建第一个项目

在准备好开发环境之后,你肯定有这样的疑惑,我如何新建一个项目?搁在以前,一般是通过IDE的“New Project”菜单,跟着引导一步一步来创建项目。现在Spring Boot提供了一种更加统一的方式,使用Spring Initializr(start.spring.io)。

Spring Initializr页面

Spring Initializr可以根据你设置的选项,生成一个新的项目,并下载到本地,你导入IDE就可以开发了。页面上第一个选项是选择构建工具,使用Maven还是Gradle。第二项选择语言,大部分用的都是Java。第三项选择使用哪个Spring Boot版本,一般来说用的都是最新的正式版,本文发布时,版本还是2.1.5。如果你需要的版本上面没有列出来,可以先生成个项目,然后再在配置文件里改成你需要的版本。

(更多…)

继续阅读 →

Spring Boot教程(1) – 准备开发环境

如果你从未运行过Spring Boot应用,那你一定很好奇这个框架到底是如何使用的,比如代码是如何组织起来的?程序从哪里开始运行?部署时候需要如何打包?在搞清楚这些问题之前,你需要搭建一个自己的开发环境,开发过程都基于这个环境。

JDK的选择

Spring Boot应用不同于以往的Spring框架应用,它可以像普通的Java程序一样以java -jar app.jar的方式运行。那么这个时候,它就是一个纯Java程序了,你的系统中只要有了Java,就可以把程序跑起来。Spring Boot最新版(2.1.5)的源码是基于Java 8的,你也可以使用Java 11或者其他高于8的版本。在选择Java版本的时候,你可以参考这篇文章。JDK的安装过程不再赘述,想必你在学习Java语法的时候就已经完成了这个过程。我推荐使用Java 11,毕竟你是在学习知识嘛,肯定选择最新的稳定版本,生产环境另说。

(更多…)

继续阅读 →

准备写个Spring Boot教程

最近我打算写一系列Spring Boot教程,用来讲解Spring Boot基础知识和一些常见的应用场景。你可能会问,现在讲这个话题的东西这么多,写出来的意义是啥,别人会看么。我的觉得吧,一条街上很多饭店,你决定去哪个,肯定还是看谁的好吃或者服务好。我肯定得有一些不一样的地方,下面是我的思路:

  1. 首先我不打算列出长篇累牍的代码。我平常搜索文章的时候,也时常碰到有文章会连续出现整页的代码,有的缩进还是乱的,给人一种恐惧感。我会尽量把展示出来的代码压缩,减少干扰,让读者注意力集中在理解上。
  2. 其次我计划尝试用画图去说明问题。之前在学习Spring Security的时候,我脑子里充满了疑惑,搞不清楚他拦截的原理。后来搞懂了之后我脑子里就有一张图,十分清晰地表示了那一堆Filter是如何排序的,一个请求是如何被拦截处理的,如果我能把类似的容易理解的图像传递给读者,那么他们就会节省很多解惑的时间。
  3. 覆盖学习路径中可能遇见的错误。如果你照着某个教程一步一步走下去,可能遇见了bug,解决这类bug也是挺苦恼的,我尽量把这些可能发生的bug说出来。条条大路通罗马,通不到罗马的路,也需要给路人指出来,让人心里有底。
  4. 文章不会很长,专注于解决某个问题。对于想解决具体问题的人来说,他能判断出内容是否有用,对于想系统学习的人来说,文章长短倒是不太重要,一篇一篇来就是了。

我在纸上大概规划了下有哪些主题要写,随随便便就列了20多个,的确有很多要说的。如果再加上Spring Cloud的话,就更多了。如果你在内容上有什么建议,可以在下面给我留言。

我也在学习和实践Spring Boot的过程之中,同时我深知写作的过程会让我对知识的理解水平上升到高于写作内容的层次,你要教别人,就得搞清楚之前你只是会用的技能。看看我能否坚持下来吧。

继续阅读 →

数据库迁移工具Flyway

不管是在开发过程中还是在线上,数据库结构都是经常变化的,很多情况下都需要对数据库的变化做跟踪和管理,Flyway就是这样一款管理工具。

在Flyway里,每次数据库变化都称为一次迁移,每次迁移都有一个版本号。Flyway会在数据库里存储当前处在哪个版本。每当需要上线的时候,你可以手动或者自动地将代码里的多个迁移,同步到数据库当中。

迁移的规则

如图所示,文件名以V开头,后面跟上版本号,然后是两个下划线,最后是对此次迁移的描述,用下划线或者空格隔开。在每个sql文件中,都可以写多个DDL语句或者CRUD语句,根据你的需求而定。

怎么才能触发迁移呢?Flyway提供了多种方式:

(更多…)

继续阅读 →