spring boot最让人激动的两个特性是起步依赖和自动配置。本篇介绍如何快速地使用spring boot框架搭建出一个spring mvc rest的站点,让我们对spring boot有一个初步的认识。
获取模板代码
获取模板代码有好几种方式,例如:
- spring initializr
- spring cli
- 各种ide插件
方式一:spring initializr
使用spring initializr是最方便的,无需安装任何东西。在浏览器中访问http://start.spring.io/,只需填入相关信息,点击[generate project]按钮,即可下载一个zip文件,解压这个zip文件,就得到了一个maven项目(或gradle项目)。
方式二:spring cli
作为开发人员,我更喜欢用命令行的方式。window或linux用户,直接下载https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.0.1.RELEASE/spring-boot-cli-2.0.1.RELEASE-bin.tar.gz文件,加压后配置环境变量即可使用spring
命令。mac用户可以用homebrew更加方便地安装spring cli
$ brew tap pivotal/tap
$ brew install springboot
spring cli安装好之后,下面来试一下。先来看看spring命令的帮助
$ spring --help
我们需要用spring init
命令来创建,可以使用spring help init
来查看init
时的参数。输入以下命令来创建一个项目
$ spring init -g=com.example -a=spring-boot-start -d=web
Using service at https://start.spring.io
Content saved to 'spring-boot-start.zip'
spring为我们生成了一个zip文件,解压该文件即可得到一个模板项目。
增加一个controller
使用你习惯的ide打开这个模板项目,新增一个类,内容如下
package com.example.springbootstart.controllers;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestContoller {
@RequestMapping("/test")
public String hello(){
return "hello,spring boot";
}
}
编译、打包、运行
使用maven编译并打包
mvn clean package
编译以后会得到一个fat jar,并且内嵌了一个tomcat,所以可以直接运行这个jar文件
java -jar target/spring-boot-start-0.0.1-SNAPSHOT.jar
启动后,访问 http://localhost:8080/test,即可显示hello,spring boot
。
关于spring boot
我之编写了一个controller的代码,其它的什么都没干,没有任何配置,就运行出来一个mvc站点,还不缺包,版本也不冲突了,这就归功于spring boot了。文章开头提到了spring boot的两大特性(其实还有很多特性,后面的博客会提到),分别是:起步依赖和自动配置。
关于起步依赖
打开pom.xml文件看一下,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<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>com.example</groupId>
<artifactId>spring-boot-start</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这里面的starter,就是所谓的起步依赖。看上去非常简洁,功能却十分强大,不仅包含了运行一个mvc站点所需的所有必要的依赖了,还包括:内嵌servlet容器、fat jar、executable jar等特性,启动时只需要简单地使用java -jar
即可,无需再设置其它的classpath。
关于自动配置
在spring boot之前,如果想使用spring mvc来开发一个站点的话,需要配置好几个bean,我原来的一篇博客开始使用spring mvc专门记录了如何从头开始搭建一个springmvc站点。而现在,我们没有配置DispatcherServlet,没有配置InternalResourceViewResolver,没有设置静态文件的地址等,spring检测到当前项目引用了spring-mvc的包,就自动注册了对应的spring bean,并对一些属性设置了默认值。
我接下来会关于spring boot写一个系列的博客,争取覆盖到spring boot更多的用法和细节。系列中共包含以下几个主题:
- spring boot自动配置的实现原理——@Conditional
- spring boot绑定配置文件中的值——@ConfigurationProperties
- spring boot中使用jpa
- spring boot中使用logging
- spring boot中使用spring security
- spring boot actuator