1、SpringBoot介绍
Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,只需"just run"。 我们为Spring平台及第三方库提供开箱即用的设置,这样就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。
可以使用Spring Boot创建Java应用,并使用java -jar启动它或采用传统的war部署方式。
1.1 解决的问题
- 依赖太多了, 且存在版本问题
- 配置太多了且每次都一样, 大部分工程, 配置每次都是一样的, 从一个地方拷贝到另外一个地方. 且Spring发展10多年, 各种配置版本太多, 对于很多程序员来说, 分不清哪个是有效, 哪个无效。
- 部署太麻烦. 需要tomcat部署, 项目结构也需要照着Java EE的目录结构来写。
1.2 SpringBoot特点
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成和对XML没有要求配置
1.3 SpringBoot功能
- 自动配置(auto-configuration)
一项简化配置的功能,比如在classpath中发现有spring security的jar包,则自动创建相关的bean等 - starters(简化依赖)
这个比较关键,方便spring去集成各类组件,比如redis、mongodb等等。
1.4 SpringBoot的发展
2、系统要求
默认情况下,使用SpringBoot 2.1.2最新版本,最好安装JDK8以及以上的版本,maven使用3.3或者以上的版本(本文使用maven3.5版本)
3、第一个SpringBoot项目
步骤一:新建一个普通maven项目:
步骤二:创建pom文件
<?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>enjoy</groupId>
<artifactId>springbootvip</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
步骤三:编写代码
为了完成应用程序,我们需要创建一个单独的Java文件。Maven默认会编译src/main/java下的源码
新建:cn.enjoy.Example
package cn.enjoy;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello SpringBoot!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
小贴士:
@RestController和@RequestMapping说明:
@RestController:这被称为一个构造型(stereotype)注解。它为阅读代码的人们提供建议。对于Spring,该类扮演了一个特殊角色。在本示例中,我们的类是一个web @Controller,所以当处理进来的web请求时,Spring会询问它。
@RequestMapping:注解提供路由信息。它告诉Spring任何来自"/"路径的HTTP请求都应该被映射到home方法。@RestController注解告诉Spring以字符串的形式渲染结果,并直接返回给调用者。
@EnableAutoConfiguratio:这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。
main方法:这只是一个标准的方法,它遵循Java对于一个应用程序入口点的约定。我们的main方法通过调用run,将业务委托给了Spring Boot的SpringApplication类。SpringApplication将引导我们的应用,启动Spring,相应地启动被自动配置的Tomcat web服务器。我们需要将Example.class作为参数传递给run方法来告诉SpringApplication谁是主要的Spring组件。
执行main方法,使用一个浏览器打开?localhost:8080,以下输出:
Hello World!
4、注意事项
Spring Boot不需要使用任何特殊的代码结构,然而,这里有一些地方需要注意使用"default"包。
当类没有包含package声明时,它被认为处于default package下。通常不推荐使用default package,并应该避免使用它。因为对于使用@ComponentScan,@EntityScan或@SpringBootApplication注解的Spring Boot应用来说,来自每个jar的类都会被读取,这会造成一定的问题。
定位main应用类
通常建议你将main应用类放在位于其他类上面的根包(root package)中。通常使用@EnableAutoConfiguration注解你的main类,并且暗地里为某些项定义了一个基础“search package”。
例如,如果你正在编写一个JPA应用,被@EnableAutoConfiguration注解的类所在包将被用来搜索@Entity项。
使用根包允许你使用@ComponentScan注解而不需要定义一个basePackage属性。如果main类位于根包中,你也可以使用@SpringBootApplication注解。
下面是一个典型的结构:
cn
+- enjoy
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java