1.创建springboot 项目
从Spring Initializr开始Spring Boot开发的方法。因为选择哪种方法都行,所以要选个最合适的,着手用Spring Boot开发就好了。登录https://start.spring.io/,我们要用Spring MVC来处理Web请求,用Thymeleaf来定义Web视图,用Spring Data JPA来把阅读列表持久化到数据库里,姑且先用嵌入式的H2数据库。虽然也可以用Groovy,但是我们还是先用Java来开发这个应用程序吧。此外,我们使用Gradle作为构建工具。
无论是用Web界面、Spring Tool Suite还是IntelliJ IDEA,只要用了Initializr,你就要确保勾选了Web、Thymeleaf和JPA这几个复选框。还要记得勾上H2复选框,这样才能在开发应用程序时使用这个内嵌式数据库。使用的信息如下:
图1-1 使用Initializr的Web界面初始化应用程序
2.查看初始化的springboot项目结构
选择explore,可以打开查看项目结构,如图2-1所示:
图2-1 初始化后的springboot项目结构
整个项目结构遵循传统Maven或Gradle项目的布局,即主要应用程序代码位于src/main/java目录里,资源都在src/main/resources目录里,测试代码则在src/test/java目录里。此刻还没有测试资源,但如果有的话,要放在src/test/resources里。
再进一步,你会看到项目里还有不少文件。
- build.gradle:Gradle构建说明文件。
- DemoApplication.java :应用程序的启动引导类(bootstrap class),也是主要的Spring配置类。
- application.properties :用于配置应用程序和Spring Boot的属性。
- DemoApplicationTests.java :一个基本的集成测试类。
先让我们来看看 DemoApplication.java 。
1.启动引导Spring
DemoApplication 在Spring Boot应用程序里有两个作用:配置和启动引导。首先,这是主要的Spring配置类。虽然Spring Boot的自动配置免除了很多Spring配置,但你还需要进行少量配置来启用自动配置。正如代码所示,这里只有一行配置代码。
package readinglist; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; # 开启组件扫描和自动配置 @SpringBootApplication public class ReadingListApplication { public static void main(String[] args) { # 负责启动引导应用程序 SpringApplication.run(ReadingListApplication.class, args); } }
@SpringBootApplication 开启了Spring的组件扫描和Spring Boot的自动配置功能。实际
上, @SpringBootApplication 将三个有用的注解组合在了一起。
- Spring的 @Configuration :标明该类使用Spring基于Java的配置。虽然本书不会写太多配置,但我们会更倾向于使用基于Java而不是XML的配置。
- Spring的 @ComponentScan :启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。本章稍后会写一个简单的Spring MVC控制器,使用 @Controller 进行注解,这样组件扫描才能找到它。
- Spring Boot 的 @EnableAutoConfiguration : 这 个 不 起 眼 的 小 注 解 也 可 以 称 为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了。
你几乎不需要修改 DemoApplication.java 。如果你的应用程序需要Spring Boot
自动配置以外的其他Spring配置,一般来说,最好把它写到一个单独的 @Configuration 标注的类里。(组件扫描会发现并使用这些类的。)极度简单的情况下,可以把自定义配置加入DemoApplication.java 。
2. 测试springboot程序
Initializr还提供了一个测试类的骨架,可以基于它为你的应用程序编写测试。但
DemoApplicationTests (代码)不止是个用于测试的占位符,它还是一个例子,告诉你如何为Spring Boot应用程序编写测试。
package com.example.demo; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; #通过springboot加载上下文 @SpringBootTest class DemoApplicationTests { # 测试加载的上下文 @Test void contextLoads() { } }
ReadingListApplicationTests 里还有一个简单的测试方法,即 contextLoads() 。实
际上它就是个空方法。但这个空方法足以证明应用程序上下文的加载没有问题。如果
ReadingListApplication 里定义的配置是好的,就能通过测试。如果有问题,测试就会失败。
当然,现在这只是一个新的应用程序,你还会添加自己的测试。但 contextLoads() 方法是个良好的开端,此刻可以验证应用程序提供的各种功能。后边的文章会更详细地讨论如何测试SpringBoot应用程序。
3.配置应用程序属性
Initializr为你生成的application.properties文件是一个空文件。实际上,这个文件完全是可选的,你大可以删掉它,这不会对应用程序有任何影响,但留着也没什么问题。
稍后,我们肯定有机会向application.properties里添加几个条目。但现在,如果你想小试牛刀,可以加一行看看:
server.port=8000
加上这一行,嵌入式Tomcat的监听端口就变成了8000,而不是默认的8080。你可以重新运行应用程序,看看是不是这样。
这说明application.properties文件可以很方便地帮你细粒度地调整Spring Boot的自动配置。你还可以用它来指定应用程序代码所需的配置项。在第3章里我们会看到好几个例子,演示application.properties 的这两种用法。
要注意的是,你完全不用告诉Spring Boot为你加载 application.properties ,只要它存
在就会被加载,Spring和应用程序代码都能获取其中的属性。
我们差不多已经把初始化的项目介绍完了,下一篇文章,让我们来看看Spring Boot应用程序是如何构建的。