01.Spring Boot 实战~认识Spring Boot
SpringBoot
Spring Boot 是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了 Spring 众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot 是一个服务于框架的框架,服务范围是简化配置文件。所以从本质上来说,SpringBoot 其实就是 Spring 框架的另一种表现形式。
使用 SpringBoot 可以创建独立的 Spring 应用程序
在Spring Boot中直接嵌入了Tomcat、 Jetty、 Undertow等Web容器, 所以在使用SpringBoot 做 Web 开发时不需要部署 WAR 文件。通过提供自己的启动器(Starter)依赖,简化项目构建配置 ,尽量的自动配置 Spring 和第三方库,提供了生产就绪特征,如:度量指标,运行状况检查和外部化配置,绝对没有代码生成,也不需要 XML 配置文件
SpringBoot本质是Spring Framework,Spring Framework主要作用就是整合其他技术。所以学习Spring Boot就是在学习如何整合其他技术。
Spring Boot 版本
SNAPSHOT : 开发版。
CURRENT:最新版,不一定稳定。
GA:GeneralAvailability,正式发布的版本。
通过IDEA Maven创建SpringBoot项目
关于Maven的使用可以点击这里导入依赖
<?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.alvin</groupId>
<artifactId>Spring Boot Study</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring Boot Study Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!-- SpringBoot 的父级依赖,只有继承它项目才是 Spring Boot 项目
spring-boot-starter-parent 是一个特殊的 starter,
它用来提供相关的 Maven 默认依赖。
使用它之后,常用的包依赖可以省去 version 标签。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<!--
启动器依赖
-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--
spring-boot-maven-plugin 插件是将 springboot 的应用程序打包成 jar 包的插件。
将所有 应用启动运行所需要的 jar 包都包含进来,从逻辑上将具备了独立运行的条件。
当运行"mvn package"进行打包后,使用"java-jar"命令就可以直接运行。
-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动类
启动类在启动时会做注解扫描(@Controller、@Service、@Repository......),扫描 位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。
启动类与启动器的区别:
启动类表示项目的启动入口
启动器表示 jar 包的坐标
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//启动类必须要有这个注解!
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
//必须要通过SpringApplication下的静态方法run
//第一个参数是启动类的class,第二个参数是main方法里的args
SpringApplication.run(SpringBootDemoApplication.class,args);
}
}
SpringBoot 将所有的功能场景都抽取出来,做成一个个的 starter(启动器),只需要在项 目里面引入这些 starter 相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景, 在 jar 包管理上非常方便,最终实现一站式开发。
SpringBoot 提供了多达 44 个启动器
spring-boot-starter | SpringBoot 的核心启动器,包含了自动配置、日志和 YAML |
spring-boot-starter-actuator | 帮助监控和管理应用 |
spring-boot-starter-web | 支持全栈式 Web 开发,包括 Tomcat 和 spring-webmvc |
spring-boot-starter-amqp | 通过 spring-rabbit 来支持 AMQP 协议(AdvancedMessage QueuingProtocol) |
spring-boot-starter-aop | 支持面向方面的编程即 AOP,包括 spring-aop 和 AspectJ |
spring-boot-starter-artemis | 通过 ApacheArtemis 支持 JMS 的 API(JavaMessage ServiceAPI) |
spring-boot-starter-batch | 支持 SpringBatch,包括 HSQLDB 数据库 |
spring-boot-starter-cache | 支持 Spring 的 Cache 抽象 |
spring-boot-starter-cloud-connectors | 支持 Spring Cloud Connectors,简化了在像 CloudFoundry 或 Heroku 这样的云平台上连 接服务。 |
spring-boot-starter-data-gemfire | 支持 GemFire 分布式数据存储,包括 spring-data-gemfire |
spring-boot-starter-data-jpa | 支持 JPA(Java PersistenceAPI),包括 spring-data-jpa、spring-orm、Hibernate |
spring-boot-starter-data-rest | 通过 spring-data-rest-webmvc,支持通过 REST 暴露 Spring Data 数据仓库 |
spring-boot-starter-data-solr | 支持 ApacheSolr 搜索平台,包括 spring-data-solr |
spring-boot-starter-freemarker | 支持 FreeMarker 模板引擎 |
spring-boot-starter-groovy-templates | 支持 Groovy 模板引擎 |
spring-boot-starter-hateoas | 通过 spring-hateoas 支持基于 HATEOAS 的 RESTfulWeb 服务 |
spring-boot-starter-hornetq | 通过 HornetQ 支持 JMS |
spring-boot-starter-integration | 支持通用的 spring-integration 模块 |
spring-boot-starter-jdbc | 支持JDBC数据库 |
spring-boot-starter-jersey | 支持 JerseyRESTfulWeb 服务框架 |
spring-boot-starter-jta-atomikos | 通过 Atomikos 支持 JTA 分布式事务处理 |
spring-boot-starter-jta-bitronix | 通过 Bitronix 支持 JTA分布式事务处理 |
spring-boot-starter-mail | 支持 javax.mail 模块 |
spring-boot-starter-mobile | 支持 spring-mobile |
spring-boot-starter-mustache | 支持 Mustache 模板引擎 |
spring-boot-starter-redis | 支持 Redis 键值存储数据库,包括 spring-redis |
spring-boot-starter-security | 支持 spring-security |
spring-boot-starter-social-facebook | 支持 spring-social-facebook |
spring-boot-starter-social-linkedin | 支持 pring-social-linkedin |
spring-boot-starter-social-twitter | 支持 pring-social-twitter |
spring-boot-starter-test | 支持常规的测试依赖,包括 JUnit、Hamcrest、Mockito 以及 spring-test 模块 |
spring-boot-starter-thymeleaf | 支持 Thymeleaf 模板引擎,包括与 Spring 的集成 |
spring-boot-starter-velocity | 支持 Velocity 模板引擎 |
spring-boot-starter-websocket | 支持 WebSocket 开发 |
spring-boot-starter-ws | 支持 SpringWebServices |
spring-boot-starter-actuator | 增加了面向产品上线相关的功能,比如测量和监控 |
spring-boot-starter-remote-shell | 增加了远程 sshshell 的支持 |
spring-boot-starter-jetty | 引入了 JettyHTTP 引擎(用于替换 Tomcat) |
spring-boot-starter-log4j | 支持 Log4J 日志框架 |
spring-boot-starter-logging | 引入了 Spring Boot 默认的日志框架 Logback |
spring-boot-starter-tomcat | 引入了 Spring Boot 默认的 HTTP 引擎 Tomcat |
spring-boot-starter-undertow | 引入了 UndertowHTTP 引擎(用于替换 Tomcat) |
文件的配置
SpringBoot 提供一个名称为 application 的全局配置文件,支持两种格式 properteis 格式 与 YAML 格式。
配置 Tomcat 监听端口
基本格式要求,大小写敏感,使用缩进代表层级关系,并且相同的部分只出现一次。
server:
port: 7777
不同格式的加载顺序
如 果 同 一 个 目 录 下 , 有 application.yml 也 有 application.properties, 默 认 先 读 取 application.properties。
如果同一个配置属性,在多个配置文件都配置了,默认使用第 1 个读取到的,后面读取 的不覆盖前面读取到的。
不同位置的加载顺序
当前项目根目录下的一个/config 子目录中(最高)
config/application.properties
config/application.yml
当前项目根目录中(第二)
application.properties
application.yml
项目的 resources 即 classpath 根路径下的/config 目录中(第三)
resources/config/application.properties
resources/config/application.yml
项目的 resources 即 classpath 根路径中(最后)
resources/application.properties
resources/application.yml
第一个基于Spring Boot的Spring MVC项目
关于SpringMVC可以点击这里导入依赖
<?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.alvin</groupId>
<artifactId>Spring Boot Study</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring Boot Study Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
编写启动类(SpringBootDemoApplication)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//启动类必须要有这个注解!
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
//必须要通过SpringApplication下的静态方法run
//第一个参数是启动类的class,第二个参数是main方法里的args
SpringApplication.run(SpringBootDemoApplication.class,args);
}
}
配置端口(application.properties)
server.port=7777
Spring MVC
@Controller
public class MyController {
@RequestMapping("/helloworld")
@ResponseBody
public String show(){
return "hello";
}
}
这个时候我们运行启动器就可以了,不需要运行tomcat,也不需要配置SpringMVC等文件,直接在浏览器输入地址就可以了!
SpringBoot 的核心注解
注解 | 说明 |
@SpringBootApplication | 是 SpringBoot 的启动类。 此注解等同于@Configuration+@EnableAutoConfiguration+@ComponentScan 的组合。 |
@SpringBootConfiguration | @SpringBootConfiguration 注解是@Configuration 注解的派生注解,跟@Configuration 注解的功能一致,标注这个类是一个配置类,只不过@SpringBootConfiguration 是 springboot 的注解,而@Configuration 是 spring 的注解 |
@Configuration | 通过对 bean 对象的操作替代 spring 中 xml 文件 |
@EnableAutoConfiguration | Spring Boot 自动配置(auto-configuration):尝试根据你添加的 jar 依赖自动配置你的 Spring 应用。是@AutoConfigurationPackage 和@Import(AutoConfigurationImportSelector.class) 注解的组合 |
@AutoConfigurationPackage | @AutoConfigurationPackage 注解,自动注入主类下所在包下所有的加了注解的类 (@Controller,@Service 等),以及配置类(@Configuration) |
@Import({AutoConfigurationImportSelector.class}) | 直接导入普通的类 导入实现了 ImportSelector 接口的类 导入实现了 ImportBeanDefinitionRegistrar 接口的类 |
@ComponentScan | 组件扫描,可自动发现和装配一些 Bean |
@ConfigurationPropertiesScan | @ConfigurationPropertiesScan 扫描配置属性。@EnableConfigurationProperties 注解的作 用是使用 @ConfigurationProperties 注解的类生效 |