2.2 构建第一个Spring Boot程序
这一节,我们使用Spring Boot构建一个最简单的Web应用。
2.2.1 新建Maven项目
Spring Boot使用3.2以上版本的Maven,这里我们使用的版本为3.5。在Eclipse的菜单中选择“File→New→Other”命令,选中“Maven”下的“Maven Project”,单击“Next”按钮,在“New Maven Project”页面中,选择“Create a simple project”项,创建一个简单的Maven项目。在弹出的创建项目页面中,输入相应的项目信息,如图2-1所示。
图2-1 新建Maven项目
新建的Maven项目,其结构如图2-2所示。
图2-2 Maven项目结构
src/main/java用于存放主应用程序的类,src/main/resources用于存放主应用程序的资源文件,src/test用于存放测试相关的Java类和资源,pom.xml则是Maven的构建脚本。
一般情况下,Maven脚本文件需要继承“spring-boot-starter-parent”项目,并在脚本中根据需要声明一个或多个starter。修改项目的pom.xml文件,如代码清单2-1所示。
代码清单2-1:codes\02\first-boot\pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.crazyit.boot.c2</groupId> <artifactId>first-boot</artifactId> <version>0.0.1-SNAPSHOT</version> <! -- 继承spring boot的starter --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <! -- 添加web starter的依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
注意:在加入依赖后,如果Eclipse中的Maven项目存在错误,则可以选中项目,鼠标右击,在弹出的菜单中选择“Maven→Update Project”命令来解决问题。
加入依赖后,由于starter的作用,Maven会自动帮我们引用Spring框架的各个模块,例如spring-context、spring-web等,还会引入嵌入式的Tomcat。具体会帮我们的项目加入哪些依赖包,我们在Eclipse下面看一下,有个大概印象即可。
2.2.2 编写启动类
编写一个简单的启动类,就可以直接启动Web服务,启动类如代码清单2-2所示。
代码清单2-2:codes\02\first-boot\src\main\java\org\crazyit\boot\c2\FirstApp.java
@SpringBootApplication public class FirstApp { public static void main(String[] args) { SpringApplication.run(FirstApp.class, args); } }
FirstApp类使用了@SpringBootApplication注解,该注解声明该类是一个Spring Boot应用,该注解具有@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan等注解的功能,这些注解会在后面章节讲解。直接运行MyApp的main方法,看到以下输出信息后,证明启动成功:
2017-10-30 11:40:49.968 INFO 5916--- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2017-10-30 11:40:50.199 INFO 5916--- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-10-30 11:40:50.208 INFO 5916--- [ main] org.crazyit.boot.c2.FirstApp : Started FirstApp in 6.226 seconds(JVM running for 6.888)
根据输出信息可知,启动的Tomcat端口为8080。打开浏览器访问http://localhost:8080,可以看到错误页面,表示应用已经成功启动。
注意:在默认情况下,启动端口为8080,如果需要修改Tomcat端口,则可以在src/main/resources目录下面,新建application.properties文件,通过设置server.port属性来配置Tomcat端口。具体配置方法在本书后面章节讲解。
2.2.3 编写控制器
前面我们加入了spring-boot-starter-web模块,默认集成了Spring MVC,因此只需要编写一个Controller,即可实现一个最简单的HelloWorld程序。代码清单2-3为该控制器的代码。
代码清单2-3:codes\02\first-boot\src\main\java\org\crazyit\boot\c2\MyController.java
@Controller public class MyController { @GetMapping("/hello") @ResponseBody public String hello() { return "Hello World"; } }
在代码清单2-3中,使用了@Controller注解来修饰MyController,由于启动类中使用了@SpringBootApplication注解,该注解具有@ComponentScan的功能,因此@Controller会被扫描并注册。在hello方法中使用了@GetMapping与@ResponseBody注解,以声明hello方法的访问地址及返回内容。重新运行启动类,打开浏览器并访问地址http://localhost:8080/hello,则可以看到控制器的返回内容。
至此,我们的第一个Spring Boot Web程序已经完成了,整个过程非常简单。大家可以看到,使用Spring Boot后,使我们节省了很多搭建项目框架的时间,Spring Boot的starter提供了这种“一站式”的服务,帮助我们开发Web应用。
2.2.4 开发环境的热部署
每次修改Java后,都需要重新运行main方法才能生效,这样会降低开发效率。我们可以使用Spring Boot提供的开发工具来实现热部署,为项目加上以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
修改Java文件后,容器会重新加载本项目的Java类。