spring boot 笔记
框架---模块---体系---生态
简介
springboot是基于spring+java+web容器,微服务框架的杰出代表。微服务其实就是将服务粒度做小,使之可以独立承担对外服务的的职责。
特征
- 遵循“约定胜于配置”的原则,使用spring boot只需要很少的配置,大部分时候可以使用默认配置
- 项目快速搭建,可以配置整合第三方框架
- 可完全不使用xml配置,借助java config
- 内嵌Servlet(如 Tomcat)容器,可以jar包运行
- 运行中的应用状态监控
微服务优势:
- 独立性。每个微服务都是一个独立的项目。可以独立对外提供服务,可以将研发人力资源很好的分摊,避免人力资源密集带来的沟通、协作成本。(低耦合原则)
- 稳定性。任何一个微服务的失败都将只影响自己或少量其他微服务,不会影响整个服务运行体系。
SpringApplication将一个典型的spring应用启动的流程“模板化”,默认模板化后执行流程就可以满足需求了,如果有特殊需求,SpringApplication在合适的流程节点开放了一系列不同类型的扩展点,我们可以通过这些扩展点对SpringBoot程序的启动和关闭过程进行扩展。
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class }) public class Main extends WebMvcConfigurationSupport { public static void main(String[] args) { SpringApplication app = new SpringApplication(Main.class, "classpath*:/spring/*.xml"); app.setShowBanner(false); app.run(args); } }
执行流程:
1.如果我们使用的是SpringApplication的静态run方法,首先需要创建一个SpringApplication对象实例。
a)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitialize
b)使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener
c)设置main方法的定义类
2.开始执行run方法的逻辑,首先遍历执行所有通过SpringFactoriesLoader加载到的SpringApplicationRunListener,调用它们的started()方法,告诉这些SpringApplicationRunListener,SpringBoot应用要开始执行了。
3.创建并配置当前SpringBoot应用将要使用的Environment
4.遍历并调用所有的SpringApplicationRunListener的environmentPrepared()方法,告诉它们,Springboot应用使用的Environment准备好了
5.确定SpringBoot应用创建什么类型的ApplicationContext,并创建完成,然后根据条件决定是否使用自定义的ShutdownHook,是否使用自定义的BeanNameGenerator,是否使用自定义的ResourceLoader,然后将准备好的Environment设置给创建好的ApplicationContext使用
6.ApplicationContext创建完成,SpringApplication调用之前加载的ApplicationContextInitialize的initialize方法对创建好的ApplicationContext进行进一步的处理
7.遍历所有SpringApplicationRunListener的contextPrepared()方法,通知它们,SpringBoot应用使用的ApplicationContext准备好了
8.将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的Ioc容器配置加载到已经你准备完毕的ApplicationContext
9.遍历所有的SpringApplicationRunListener的contextLoader()方法,告知ApplicationContext已装载完毕
10.调用ApplicationContext的refresh()方法,完成Ioc容器可用的最后一道工序
11.查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们
12.遍历所有的SpringApplicationRunListener的finished()方法,告知,“初始化完成”
spring boot提供了很多“开箱即用”的依赖模块,以"spring-boot-starter-"开头,以解决不同场景问题。
1.SpringBoot应用将自动使用logback作为应用日志框架,
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>
2.得到一个直接可执行的web应用,当前项目下直接运行mvn spring-boot:run 就可以直接启动一个嵌入tomcat服务请求的web应用。
默认访问地址:http://localhost:8080
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
如果想使用其它容器,可引入spring-boot-starter-jetty
另外可以修改server.port使用自己指定的端口
3.访问数据库依赖此模块。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
4.负责web应用安全,配合spring-boot-starter-web使用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
5.监控,了解应用的运行状态
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
上面只是介绍一些常用的组件,sping社区还有很多其它优秀的组件,可以根据自己的业务情况研究自取。