对Spring Boot的开发环境进行搭建,并对它的特点做进一步的了解,才能更好地对Spring Boot有更深入的介绍。但是无论如何都需要先来搭建Spring Boot的工程。

搭建Spring Boot开发环境

使用Spring Boot,首先需要搭建一个快速开发的工程环境。

搭建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的技术原理,这样才能知其然,亦知其所以然。

eclipse android开发环境搭建_聊聊Spring boot2.X开发环境搭建和基本开发相关推荐

  1. 华为云龙api自动化工具_聊聊华为GDE刚发布的一体化低门槛开发平台ADC 2.0

    聊聊华为GDE刚发布的一体化低门槛开发平台ADC 2.0 华为GTS,华为GDE,ADC 2.0,这些都是什么?一文讲清楚 文/王吉伟 12月3日,华为GTS举办了2020 GTS合作伙伴大会,也是其 ...

  2. macbook配置java环境变量_如何安装Java和配置环境变量

    本文是Java下载.安装.环境变量配置的具体步骤,关于环境变量的原理参阅: Java轻松入门经典教程-环境变量配置​ke.qq.com Java年构架师技术栈/微服务/源码分析/分布式/高并发/性能优 ...

  3. 中修改环境变量_超详干货!Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  4. linux中设置环境变量_如何在Linux中设置环境变量

    linux中设置环境变量 Wondering how to set environment variables in Linux? This is exactly what we'll be doin ...

  5. go环境搭建_学习的golang第一步,搭建我们运行的环境,go! go! go

    这是Golang教程系列中的第一个教程.本教程介绍了Go,并讨论了选择Go优于其他编程语言的优势.我们还将学习如何在Mac OS,Windows和Linux中安装Go. 介绍 Go也称为Golang是 ...

  6. 手动angular2环境搭建_详解.Net Core + Angular2 环境搭建

    本文介绍了.Net Core + Angular2 环境搭建,具体如下: 环境搭建: 1)node.js版本>5.0,NPM版本>3.0,TypeScript版本>2.0(全装最新版 ...

  7. controller如何保证当前只有一个线程执行_聊聊Spring线程安全,读完之后,大部分程序员收藏了......

    Spring作为一个IOC/DI容器,帮助我们管理了许许多多的"bean".但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码. Spri ...

  8. hexo 环境变量_小白使用 Github + Hexo 从 0 搭建一个博客

    最近有几位同学在公众号后台留言问我的博客站是怎么建站的,思来想去,还是写一篇从 0 开始吧. 前置准备 我们先聊一下前置准备,可能很多同学一听说要自己搭一个博客系统,直接就望而却步.不得有台服务器么, ...

  9. 安装java 并配置环境变量_安装Java JDK并配置环境变量

    学习JAVA,必须得安装一下JDK(java development kit java开发工具包),配置一下环境就可以学习JAVA了,下面是下载和安装JDK的教程: 点开链接你应该看到如下图所示的界面 ...

最新文章

  1. Android AndFix热补丁动态修复框架使用教程
  2. Hbase Interface HConnection
  3. 树状数组萌新讲解+基础习题【一点一滴】
  4. TensorFlow从入门到理解(六):可视化梯度下降
  5. 光学定位与追踪技术_视觉SLAM技术学习笔记(一)基础知识以及SLAM的应用
  6. linux下编译yacc命令,Lex/Yacc的学习——《编译原理及实践》附录B tiny编译器源码在linux下编译实现...
  7. matlab中关闭mexfunction,mex文件的运行时Matlab自动关闭
  8. HBase 教程(超详细)
  9. ShellCode欺骗的艺术!
  10. 【转载】MiniUtilityFramework(九):CText和TEXT
  11. js html post提交表单,JS动态创建表单post提交
  12. @SpringBootTest Canot resolve symbol ‘SpringBootTest‘问题解决
  13. java exit code 137_运维:k8s pod erro exit code 137
  14. 阿里iot 华为iot_11种用于开发IoT应用程序的IoT Visual编程工具
  15. 判断浏览器版本是否ie8,ie9,ie10,ie11并提示升级
  16. 华为OD-Java面经
  17. linux下载pip
  18. 【Hadoop】谷歌的三篇论文(GFS、MapReduce分布式计算模型 、BigTable大表)
  19. android不支持USB怎么办,安卓手机usb不能用 手机找不到USB调试模式怎么解决?
  20. 今天被领导表扬了,说我认真做事、仔细有条理

热门文章

  1. swift4.2 - 一个自定义view弹框
  2. MySQL查询数据操作(DQL)
  3. 从Exchange 通往Office 365系列(十六)添加域名到Office 365
  4. sqlserver存储过程循环写法
  5. asp.net textbox 控件如何清除缓存
  6. WCF 入门 WCF基础知识问与答
  7. Innodb隔离级别的实现原理
  8. 人工智能、机器学习和深度学习的区别?
  9. 计算php代码执行时间长短的类
  10. CSS固定定位[相对浏览器] 相对定位[相对自己] 绝对定位[有relative的元素]