一、 概述
springboot是现在主流的微服务架构,是分布式spring cloud的基础。网上说的最多的就是springboot是没有xml配置的,所以配置非常简单。
springboot使用“约定优先于配置(COC,Convention Over Configuration)”的理念,简单来说,SpringBoot提供了针对企业营业开发各种场景的很多spring-boot-starter自动配置依赖模块,这些模块都基于“开箱即用”的原则。使得企业应用开发中各种场景的Spring应用更加快速高效。
SpringBoot解决的问题
SpringBoot的优点。
- 使编码变得简单:推荐使用注解
- 使配置变得简单:自动配置,快速构建项目,快速集成新技术的能力
- 使部署变得简单:自动内嵌Tomcat,Jetty等web容器
- 使监控变得简单:自带项目监控
二、依赖模块
SpringBoot提供了针对企业应用开发的各种场景的很多spring-boot-starter自动配置依赖模块,它们都以spring-boot-starter-
作为命名前缀,并且都位于org.springframework.boot包或者命名空间下。
SpringBoot的配置分类:
- 命令行参数
- 系统环境变量
- 位于文件系统中的配置文件
- 位于classpath中的配置文件
- 固话到代码中得配置
以上几种方式按照优先级从高到低排列,高优先级凡是提供的配置项会覆盖或者优先生效,比如通过命令行参数传入的配置项会覆盖通过环境变量传入的同一配置项。
时间项目开发中最常用的配置是配置文件,不管是位于文件系统还是位于classpath,SpringBoot应用默认的配置文件叫做application.properties,可以放在项目的src/main/resource目录下或者在类路径的/config目录下。
日志依赖模块
Java的日志系统有许多种,比如java.util提供的日志功能,有log4j,log4j2,commons logging等日志框架。要在springboot中添加日志框架,可以通过在maven中设置spring-boot-starter-logging,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
SpringBoot将自动使用logback作为项目的日志框架。SpringBoot为开发者提供了很多默认的日志配置,所以这里可以"开箱即用"。
若需要对SpringBoot提供的默认日志配置进行调整,可以遵循logback的约定,使用自己定制的logback.xml日志文件。logback.xml日志文件建议放在项目scr/main、resources目录下,然后在application.properties中指定。
logging.config = logback.xml
当然也可以配置别的日志框架,譬如配置log4j2,只需添加以下依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
Web开发依赖模块 Spring-boot-starter-web
要在spring框架下使用MVC框架,需要配置spring-boot-starter-web模块,maven配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
简单引入之后就可以使用web的mvc了,项目的App可以直接启动一个嵌入式的tomcat的web应用,然后直接编写Controller就可以实现对访问路径的控制了。
Controller的demo如下:
@RestController
@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
public class FirstbootApplication {
@RequestMapping("/hello")
public String index() {
return "Hello Spring boot";
}
public static void main(String[] args) {
SpringApplication.run(FirstbootApplication.class, args);
}
}
直接运行main函数就可以启动项目。
SpringBoot的web模块非常简单方便,但是简单的背后有着很多的限制,也可以叫做“约定”,遵守了这些约定才能更好的使用spring-boot-starter-web模块。
项目层面的约定
springBoot中的静态资源和页面文件统一放在src/main/resource目录对应的子目录下。这一点以传统web项目不同。
SpringMVC框架层面的约定。
spring-boot-starter-web默认自动配置一下springMVC的必要组件。
- 将VeiwResolver自动注册到spring容器中。
- 将Converter和Formatter等bean自动注册到spring容器当中。
- 将对web请求的支持和相应的类型转换的HttpMessageConverter自动注册到spring容器中。
- 将MessageCodeResolver自动注册到spring容器中。
嵌入式Web容器层面的约定
spring-boot-starter-web依赖模块默认使用嵌入式Tomcat作为web容器对外提供服务,默认使用8080端口对外监听和提供服务。
也可以使用jetty和undertow作为替代方案,只需引入依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
这里基本上把spring最基本的依赖和框架结构梳理了一下,下面会从SpringBoot启动作为起点,继续介绍springBoot的启动流程。