对Spring Boot的开发环境进行搭建,并对它的特点做进一步的了解,才能更好地对Spring Boot有更深入的介绍。但是无论如何都需要先来搭建Spring Boot的工程。
搭建Spring Boot开发环境
使用Spring Boot,首先需要搭建一个快速开发的工程环境。Spring Boot工程的创建存在多种方式,但是因为当前Eclipse和IntelliJ IDEA这两种IDE的广泛应用,所以本书只介绍这两种IDE环境下的搭建。
搭建Eclipse开发环境
首先找到Eclipse的菜单Help→Eclipse Marketplace,打开这个菜单后,可以看到一个新的窗口,然后选择标签页Popular,从中找到Spring Tool Suite(STS)的插件,如图1-1所示。
这样就可以点击安装STS插件了,通过它可以很方便地引入Spring Boot的starter,而starter会引入对应的依赖包和服务器,这样就能够帮助我们快速地搭建开发环境。
下面让我们使用它创建一个工程。首先点击熟悉的菜单File→New→Project,然后输入spring过滤一些无关的内容,再选用Spring Starter Project,点击Next,创建项目,如图1-2所示。
于是它会再打开一个新的对话框,如图1-3所示。
图2-3中画框的地方是我根据自己需要进行的自定义,其中选择了使用War形式的打包,这意味着将使用的是一个带有JSP工程的项目。在实际的操作中,读者也需要根据自己的情况来定义它们。做完这些工作后,就可以点击Next进行下一步了,这样它又会弹出另外一个窗口,如图1-4所示。
图1-1 安装STS插件
图1-2 创建Spring Boot工程
图1-3 配置Spring Boot工程
图1-4 选择依赖的starter
这里选择AOP和Web,只是做最简单的项目而已,因此没有引入太多的内容。在现实的开发中,可能还需要选择NoSQL开发工具,如Redis、MongoDB等,还有数据库,如MySQL,以及持久层Hibernate或者MyBatis等项目的依赖,这些都是开发中经常用到的。当你选中所需要的包后,就可以直接点击Finish,这个时候一个新的Spring Boot工程就建好了,如图1-5所示。
图1-5 新的Spring Boot工程
从图1-5可以看到它是一个Maven项目,其中pom.xml文件已经建好,而且给我们创建了带有main方法的Chapter2Application.java文件和初始化Servlet的ServletInitializer.java文件。这里通过Chapter2Application就可以运行Spring Boot工程了。下面再打开工程中的pom.xml文件,就可以看到这些代码,如代码清单1-1所示。
代码清单1-1 项目中的pom.xml文件
这些代码是STS插件根据你选择的starter依赖来创建的,这样关于Eclipse搭建的开发环境就结束了。此时只需要使用Java Application的形式运行Chapter2Application就可以启动Spring Boot项目。
搭建IntelliJ IDEA开发环境
首先是启动IntelliJ IDEA开发环境,然后选择Create New Project,就可以看到一个新的窗口。我们选择Spring Initializr,并且将JDK切换为你想要的版本,如图1-6所示。
图1-6 使用IntelliJ IDEA创建Spring Boot工程
点击Next,也会弹出另外一个窗口,它将允许我们进行一定的配置,如图1-7所示。
图1-7 配置Spring Boot项目
同样,图中加框的地方是我根据自己的需要进行修改的内容。注意,这里还是选择了以War打包的形式,然后点击Next,又到了可以选择starter的窗口,如图1-8所示。
图1-8 选择对应的starter
也与Eclipse一样,可以根据自己的需要选择对应的starter进行依赖,IntelliJ IDEA也会为你建好工程,如图1-9所示。
你也可以看到一个建好的类Chapter2Application、ServletInitializer和Maven的pom.xml文件。运行Chapter2Application就可以启动Spring Boot工程,而pom.xml则配置好了你选中的starter依赖,这样就能够基于IntelliJ IDEA开发Spring Boot工程了。
图1-9 IntelliJ IDEA创建Spring Boot工程
到这里,如果你想使用Jetty或者Undertow作为服务器,又或者说你想切换后台日志中的商标,那么可以参考附录中的内容。
Spring Boot的依赖和自动配置
在上节中已经介绍了如何搭建Spring Boot工程,下面需要讨论它为什么在很少的配置下就能够运行。
下面以最常用的Spring MVC为例进行说明。首先打开Maven的本地仓库,找到对应Spring Boot的文件夹,可以看到图1-10所示的目录。
图1-10 Spring Boot的Maven本地仓库
这里先谈spring-boot-start-web的内容,未来还会谈到spring-boot-autoconfigure文件夹的内容,所以图 1-10 中一并加了框。打开spring-boot-start-web文件夹,就可以看到一个名为spring-boot- starter-web-2.0.0.RELEASE.pom的文件,打开它就可以看到代码清单1-2所示的代码。
代码清单1-2 spring-boot-starter-web的pom.xml文件
代码中的中文注释是我加入的。从这里可以看出,当加入spring-boot-starter-web后,它会通过Maven将对应的资源加载到我们的工程中,这样便能够形成依赖。但是这样还不足以运行Spring MVC项目,要运行它还需要对Spring MVC进行配置,让它能够生产Spring MVC所需的对象,才能启用Spring MVC,所以还需要进一步探讨。
为了探讨Spring MVC在Spring Boot自动配置的问题,首先在本地下载的Maven仓库的目录spring-boot-autoconfigure中找到
spring-boot-autoconfigure-2.0.0.RELEASE-sources.jar的包。它是一个源码包,把它解压缩出来,打开它目录下的子目录后,我们就可以看到许多配置类,如图2-11所示。
图1-11 Spring Boot的默认配置类
这里可以看到存在很多的类,其中加框的类DispatcherServletAutoConfiguration就是一个对DispatcherServlet进行自动配置的类。因为本书不是源码分析的书,所以不对注解这些内容进行深入的探讨,只是截取DispatcherServletAutoConfiguration源码中的一个内部类DispatcherServletConfiguration对Spring Boot的自动配置做最基本的讲解,如代码清单1-3所示。
代码清单1-3 部分源码分析
注意上述代码中加粗注解的注释,这些中文注释是我加入的,为的是更好地说明Spring Boot的自动配置功能。通过上面的代码,可以看到Spring Boot内部已经自动为我们做了很多关于DispatcherServlet的配置,其中的@EnableConfigurationProperties还能够在读取配置内容的情况下自动生成Spring MVC所需的类,有关这些内容的讨论可以参考附录。到这里,应该明白为什么几乎在没有任何配置下就能用Spring Boot启动Spring MVC项目,这些都是Spring Boot通过Maven依赖找到对应的jar包和嵌入的服务器,然后使用默认自动配置类来创建默认的开发环境。但是有时候,我们需要对这些默认的环境进行修改以适应个性化的要求,这些在Spring Boot中也是非常简单的,正如@EnableConfigurationProperties注解那样,它允许读入配置文件的内容来自定义自动初始化所需的内容,下节将探讨这个问题。
使用自定义配置
上节讨论了Spring Boot存在自动装配组件和自定义的配置,这些它都给予了开发者默认的约定配置项。关于这些内容,可以在它公布的网址上看到所有的配置项,网址是http://docs.spring.io/spring- boot/docs/current-SNAPSHOT/reference/htmlsingle/#appendix。这些配置项多达300多项,所以十分繁复,好在我们并不需要全部去配置,只是根据自己工程的需要引入对应的starter,对其进行必要的配置就可以了。
本书不会像流水账那样罗列这些配置项,因为这些很无趣也没有必要,而只是根据讲解的需要,引入对应的stater,才会讨论对应的配置项。将来在讨论数据库、NoSQL等内容时,才会讨论对应的配置项。这里需要我们记住的是通过这些约定的配置就可以在很大程度上自定义开发环境,以适应真实需求。这就是Spring Boot的理念,配置尽量简单并且存在约定,屏蔽Spring内部的细节,使得Spring能够开箱后经过简单的配置后即可让开发者使用,以满足快速开发、部署和测试的需要。
如果你按照上述使用Eclipse或者IntelliJ IDEA进行新建工程,那么可以在项目中发现它还会为你创建一个属性文件application.properties,如图2-12所示。
它是一个默认的配置文件,通过它可以根据自己的需要实现自定义。例如,假设当前8080端口已经被占用,我们希望使用8090端口启动Tomcat,那么只需要在这个文件中添加一行:
图1-12 Spring Boot的配置文件
这样以Java Application的形式运行Chapter2Application就可以看到Spring Boot绑定的Tomcat的启动日志:
注意,通过加粗的这行日志可以看到Tomcat是以8090端口启动的,相信读者明白了。也就是说,我们只需要修改配置文件,就能将开发的默认配置变为自定义配置。
事实上,Spring Boot的参数配置除了使用properties文件之外,还可以使用yml文件等,它会以下列的优先级顺序进行加载:
命令行参数;
来自java:comp/env的JNDI属性;
Java系统属性(System.getProperties());
操作系统环境变量;
RandomValuePropertySource配置的random.*属性值;
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件;
jar包内部的application-{profile}.properties或application.ym(带spring.profile)配置文件;
jar包外部的application.properties或application.yml(不带spring.profile)配置文件;
jar包内部的application.properties或application.ym(不带spring.profile)配置文件;
@Configuration注解类上的@PropertySource;
实际上,yml文件的配置与properties文件只是简写和缩进的差别,因此差异并不大,所以本书统一使用properties文件进行配置。对于需要使用yml文件的读者,只是需要稍加改动即可。
开发自己的Spring Boot项目
上面我们修改了服务器的启动端口,有时候还需要修改Spring MVC的视图解析器(ViewResolver)。Spring MVC的视图解析器的作用主要是定位视图,也就是当控制器只是返回一个逻辑名称的时候,是没有办法直接对应找到视图的,这就需要视图解析器进行解析了。在实际的开发中最常用的视图之一就是JSP,例如,现在控制器中返回一个字符串“index”,那么我们希望它对应的是开发项目的/WEB-INF/jsp/index.jsp文件。如果你还对Spring MVC不熟悉,那也没有关系,未来我们还会谈到它,这里的代码很简单,你只需要依葫芦画瓢就可以体验运行Spring Boot项目了。下面的主要任务就是如果通过Spring Boot完成这个功能。首先我们需要在Maven的pom.xml中加入JSP和JSTL的依赖包,如代码清单1-4所示。
代码清单1-4 新增JSP和JSTL的Maven依赖配置
为了配置视图解析器(ViewResolver),将application.properties文件修改为如代码清单`-5所示。
代码清单1-5 定义视图前后缀
这里的spring.mvc.view.prefix和spring.mvc.view.suffix是Spring Boot与我们约定的视图前缀和后缀配置,意思是找到文件夹/WEB-INF/jsp/下以.jsp为后缀的JSP文件,那么前缀和后缀之间显然又缺了一个文件名称,在Spring MVC机制中,这个名称则是由控制器(Controller)给出的,为此新建一个控制器IndexController,其代码如代码清单1-6所示。
代码清单1-6 开发控制器
这里定义了一个映射为/index的路径,然后方法返回了“index”,这样它就与之前配置的前缀和后缀结合起来找对应的jsp文件,为此我们还需要开发一个对应的jsp文件,为此我们先再建一个/webapp/WEB-INF/jsp/index.jsp文件,如代码清单1-7所示。
代码清单1-7 开发视图(/webapp/WEB-INF/jsp/index.jsp)
这样我们就完成了一个简单的控制器,并且让视图解析器找到视图的功能。从上面来看定义视图解析器,在Spring Boot中只需要通过配置文件定义视图解析器的前后缀即可,而无须任何代码,这是因为Spring Boot给了我们自定义配置项,它会读入这些自定义的配置项,为我们生成Spring MVC中的视图解析器。正如它所承诺的尽可能地配置Spring开发环境,然后再看到即将运行Chapter2Application.java文件,如代码清单1-8所示。
代码清单1-8 Spring Boot运行文件Chapter2Application
这里的注解@SpringBootApplication标志着这是一个Spring Boot入门文件。加粗的代码则是以Chapter2Application类作为配置类来运行Spring Boot项目,于是Spring Boot就会根据你在Maven加载的依赖来完成运行了。接下来我们以Java Application的形式运行类Chapter2Application,就可以看到Tomcat的运行日志。由于已经把端口修改为了8090,因此打开浏览器后输入http://localhost:8090/index,就可以看到运行的结果如图1-13所示。
图1-13 测试视图解析器
这样我们就搭建完成Spring Boot的开发环境了。因为Spring Boot是基于Spring原理基础之上的,所以在讨论Spring Boot时,也十分有必要介绍Spring的技术原理,这样才能知其然,亦知其所以然。这些是后续章节的任务了。
杨开振 著
Spring框架是Java EE开发的事实标准,而Spring Boot是业界最流行的微服务开发框架。本书从一个最简单的工程开始讲解Spring Boot企业级开发,其内容包含全注解下的Spring IoC和AOP、数据库编程、数据库事务、NoSQL技术、Spring MVC、Spring 5新一代响应式框架WebFlux、REST风格和Spring Cloud分布式开发等。
扫码关注我们
在“异步社区”后台回复“关注”,即可免费获得2000门在线视频课程