什么是springboot

springboot是Spring组织下的子项目,是Spring组件的一站式解决方案,主要是简化spring使用流程,精简了复杂的配置;提供了各种启动器,方便快速开发;内置了容器,程序可以独立运行。

(普通项目:Java安装,Java配置,tomcat安装,tomcat配置,maven安装,maven配置

boot项目:Java安装,配置都可以是自动的)

springboot的核心配置文件

application和bootstrap配置文件,格式任选(properties,yml两种都可以)

application用于springboot项目的自动化配置

bootstrap,一般不用,特殊情况下

使用spring cloud config组件时,需要线连接到配置中心,去加载所需要的其他配置

如果需要一些固定的不能被覆盖的属性

properties文件格式:

app.auther.name=avboy

app.auther.age=30

yml文件:

App:

Auther:

Name: avboy

Age: 30

千万不要忽略冒号后面的空格

application文件中有什么可配置的

分为3类内容

基础配置(是个springboot项目就会有的)

容器配置:

Server.port=8001

Server.context-path=/xxx

日志配置:




windows 启动springboot 指定依赖路径_spring


测试配置:自带JUnit,直接使用就行,不需要打勾

插件配置(取决于你勾选的依赖)

各种方向上,各种技术,有些被springboot集成了,其他的没有被集成,用起来不一样

比如ActiveMQ,这是被集成的

所以使用的时候,配置直接就有,填写即可

功能也有,我们的代码就是写如何使用

上图中,template对象,ActiveMQQueue对象,都是自带的,我们只关心如何使用这些拥有功能的对象

如果没被集成,比如支付宝支付

创建依赖的时候没法打勾,只能手动复制

所需的配置信息,也得自己定义,自己声明和赋值

使用时还得再导入,就跟外部配置一样

外部配置(你想写什么都行)

基本用法:配置文件中写好键值,

程序中@value使用

当所需要的属性比较多的时候,一个类出现大量的value很不方便,springboot提供了@ConfigurationProperties将属性与一个bean关联

在使用的地方:

别忘了各个属性的setter方法

如果,出现这个问题(不一定出现)

就是找配置文件的过程,没有明确的找到文件

加上提示所说的依赖

或者,明确指定要读的配置文件的位置

如果项目的配置文件想换成以前那种xml配置文件

profile配置

企业级应用一般都会,区分各种环境(开发,测试,生产)

所以,多个版本的配置文件,不同环境下使用不同的文件,走不同的配置

模板命名:application-{profile}.properties

也就是,一个项目会有多个配置文件:

在application.propertise中,就不再有具体配置内容了,直接做全局的profile配置

在dev和test文件中,就是全部的配置

如果在热部署模式下,一个程序想要切换一套配置文件,直接改这个值就行

dev和test文件的内容,还是跟以前一样

在部署之后(打成jar包),可以直接用命令修改

java -jar xxx.jar --spring.profiles.active=dev

就可以调整当前项目用哪个文件

SpringBoot启动过程(必须要会说)

进入SpringBootApplication的源码

Target,适用范围:TYPE,所有的类,接口和枚举

Retention,生命周期,runtime

这个注解会被javadoc记录

子类可以继承该注解

上面四个,对应源码中前四行,也是java注解中的必填部分

springbootconfiguration注解,继承了Configuration类,表示当前是注解类

EnableAutoConfiguration,开启springboot的注解功能,借助Import功能(点开源码)

ComponentScan扫描路径设置

核心就是后面三个注解

换句话说,一个@SpringBootApplication注解,就等价于这三个注解加在一起:

有种说法,每次写这三个比较麻烦,所以合成了一个

这三个注解分别干的事情:

@Configuration注解,这是以JavaConfig形式配置的SpringIoC容器的配置类,就是做SpringIoC容器配置

@Configuration+@Bean等价于

xml配置文件中,声明一个<bean>

详细的说就是:

任何一个标注了@Configuration的Java类,都是一个JavaConfig的配置类

等价于:

进一步的话:

等价于:

任何一个标注了@Bean的方法,其返回值作为一个bean定义注册到IoC容器中,方法名默认成为这个bean的id

再进一步,需要bean与bean之间的关系

等价于

以上也就是,SpringIoC的xml声明及注入,和代码注解方式的声明及注入,的对照举例。

@ComponentScan,功能是自动扫描并加载符合条件的组件(@Component,@Service这种类)或bean定义(上面图中那种),最终将这些bean定义加载到IoC容器中

通过basePackages等属性来指定扫描范围,如果没有,默认从@ComponentScan注解所在类的包中进行扫描

所以springboot启动类,最好放在root package下面

EnableAutoConfiguration

查看源码,两个重要的地方:

第一行注解,作用是自动配置包

第二行,导入自动配置的组件

三个注解在一起,最后效果,完整的初始化了IoC容器

在执行过程中,这一句:

会分两个阶段

首先是创建一个SpringApplication对象实例

会做:

使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitializer

使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener

根据classpath中是否存在ConfigurableWebApplicationContext

特征,来决定,是否创建一个Web类型的ApplicationContext

执行SpringApplication的run方法