SpringBoot项目总结

SpringBoot优点

  • 快速创建独立运行的Spring项目以及与主流框架集成
  • 使用嵌入式的Servlet容器,应用无需打成war包
  • starters自动依赖与版本控制
  • 大量的自动配置,简化开发,也可修改默认值
  • 无需配置xml,无代码生成,开箱即用
  • 准生产环境的运行时应用监控

SpringBoot缺点

运维和部署难度大

微服务

微服务单元之间通过HTTP的方式进行轻量级通信

  • SpringBoot 构建分布式项目
  • SpringCloud 微服务之间互调
  • SpringCloud 流式计算,批处理

用maven搭建SpringBoot项目

  • 创建maven项目

  • 导入SpringBoot的官方依赖

  • 创建主程序

  • 创建Controller

  • 主程序测测试

  • 简化部署

    springboot的plugin插件能将整个应用打包成jar包, 直接使用java -jar的命令运行

1.pom文件

版本仲裁

springboot的pom依赖的父项目

		org.springframework.boot
		spring-boot-starter-parent
		2.2.1.RELEASE
		 

他的父项目时

    org.springframework.boot
    spring-boot-dependencies
    2.2.1.RELEASE
    ../../spring-boot-dependencies

里面定义了java应用需要的jar包的版本

2.导入的依赖


            org.springframework.boot
            spring-boot-starter-web

spring-boot-starter-web

spring-boot-starter SpringBoot项目的启动器,帮我们导入项目所依赖的依赖

SpringBoot将所有的功能场景抽取出来,做成一个个的starters(启动器),在项目里导入starter,相关场景的所哟襰都会导入进来,需要什么场景就导入什么场景的starter

主程序类,主入口类

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {

@SpringBootConfiguration SpringBoot的配置类

​ 标注在哪个类上,表示这是一个SpringBoot的配置类

​ @Configuration 配置类上来标注这个注解

​ 配置类----配置文件 配置类也是容器中的一个组件@Component

@EnableAutoConfiguration 开启自动配置功能

​ 以前我们需要配置的东西,SpringBoot帮我们自动配置,@EnableAutoConfiguration告诉SpringBoot开启自动配置的功能,这样自动配置才能生效

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包

​ @Import({Registrar.class})

​ Spring的底层注解@import,给容器中导入一个组件,导入的组件由AutoConfigurationPackages.Registrar.class

​ 将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器中

@Import({AutoConfigurationImportSelector.class})

​ 给容器中注入组件?

​ AutoConfigurationImportSelector:导入哪些组件的选择器;

​ 将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中

​ 会给容器中导入很多自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景所需要的所有组件,并配置好这些组件

​ 有了自动配置类,免去了我们手动编写配置注入功能组件等的工作

​ SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());

自动配置原理

从AutoConfigure类路径下的META-INF/spring.factories获取指定的类的值(类名),将这些值(xxxAutoConfiguration)作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作,以前需要我们自己配置的东西,这些配置类都帮我们做了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPBEk2lG-1574851872810)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1574416204824.png)]

Spring-boot-autoconfigure-2.2.1.RELEASE.jar

在properties中我们能配置的属性都是来源于这个功能的properties类

根据当前不同的条件判断,决定这个配置类是否生效?

一但这个配置类生效:这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;

xxxAutoConfiguration;自动配置类 每个配置类相当于以前的配置文件

给容器中添加组件

xxxproperties类:封装配置文件中相关属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8idaFIUA-1574851872811)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1574417239452.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFpg0TOA-1574851872811)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1574417096356.png)]

自动配置类必须在一定的条件下才能生效

我们怎么知道哪些配置类生效???

通过启动debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效

SpringBoot精髓

  1. SpringBoot启动会加载大量的自动配置类
  2. 我们看我们需要的功能有没有SoringBoot默认写好的自动配置类
  3. 我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
  4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们就可以在配置文件中指定这些属性的值

配置文件的书写

SpringBoot的配置文件,名称是固定的

  • application.properties
  • application.yml

yml相比于xml更加简洁,以数据为中心

基本语法

k:(空格)v

左对齐属于同一级别

值的写法

k: v

​ 字符串默认不使用单引号或者双引号

​ ""双引号:不会转义字符串里的特殊字符,特殊字符会作为本身想表达的意思

​ ''单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据

对象,map(属性和值)(键值对)

persion:
	lastName: zhangsan
	age: 20

行内写法

persion: {lastName: zhangsan,age: 18}

数组(List.Set)

用- 值表示数组中的一个元素

pets: 
- cat
- dog
- pig

行内写法

pets: [cat,dog,pig]

注解使用

@Component				//表示将这个组件交给spring管理
@ConfigurationProperties(prefix = "k")		//表示这个类使用springBoot配置文件里配置的值	需要导入配置文件处理器的依赖(会有提示)
@Value("${persion.name}")
@Value("#{11*2}")
@Value("true")
@Vailidated		校验的注解
@Email			必须是邮箱格式

@ConfigurationProperties和@Value获取值的比较

@ConfigurationProperties @Value
功能 批量注入 一个个指定
松散语法 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

只获取单项值,用@Value

用JavaBean来映射,用@ConfigurationProperties

@PropertySource()和@ImportResource区别

@PropertySource(value = {"classpath:自定义的配置文件"})		导入自定义的配置文件
@ImportResource(locations ={"classpath:spring的配置文件"} )	写在启动类上,导入spring的配置文件

springboot推荐方式

@Configuration	表明这是一个配置和类
@Bean			写在方法上,返回方法的返回值给容器

配置文件占位符

随机数
占位符获取之前配置的值,如果没有可以用:来指定默认值

多Profile(环境)模式

多peofile文件—(开发,测试),默认使用application,使用自定义的需要在application.properties中指定

yml里用—文档块来表示

激活 spring.profiles.active=模式

  • 配置文件中指定
  • 命令行方式
  • 虚拟机参数

配置文件有优先级,从高到低加载,互补配置

  • file:./config/
  • file:./
  • classpath:/config/
  • calsspath:/
  • 也可以通过spring.config.location来改变默认配置

多peofile文件—(开发,测试),默认使用application,使用自定义的需要在application.properties中指定

yml里用—文档块来表示

激活 spring.profiles.active=模式

  • 配置文件中指定
  • 命令行方式
  • 虚拟机参数

配置文件有优先级,从高到低加载,互补配置

  • file:./config/
  • file:./
  • classpath:/config/
  • calsspath:/
  • 也可以通过spring.config.location来改变默认配置

你可能感兴趣的:(SpringBoot项目总结)