Spring Boot 特性:
- SpringBoot Starter(场景启动器):将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。
- 使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。
- 自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们。
- 使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个Java的运行环境就可以跑SpringBoot的项目了,SpringBoot的项目可以打成一个jar包。
- 提供了一些生产级的特性,例如:健康检查、指标监控、外部化配置等
- 总体来说,Spring Boot 简化开发,简化配置,简化部署,简化整合,简化监控,简化运维
Springboot四大组件
- starter组件,starter包的内容就是pom文件,就是一个依赖传递包。 帮我们封装好了所有需要的依赖,避免我们自己添加导致的一些Jar包冲突或者缺少包的情况.这些Starters作为Spring相关技术的引导过程,我们 不再需要担心依赖关系,它们将由Spring Boot Starters自动管理。
- Autoconfigure 组件,就是帮我们自动把bean注入到IOC容器中
- actuator组件,actuator是Spring Boot的监控插件,本身提供了很多接口可以获取当前项目的各项运行状态指标
- Spring Boot CLI 组件(Command Line Interface)是一个命令行工具,可以用它来快速构建Spring原型应用。通过Spring Boot CLI,我们可以通过编写Groovy脚本来快速的构建出Spring Boot应用,并通过命令行的方式将其运行起来。
spring boot stater
- spring boot相比于spring 最大的优点就是使用简单,约定大于配置,spring boot stater就是提前配置好的各种依赖的组合
- stater包含了一系列可以集成到应用里面的依赖包,集成了Spring及其他技术,不需要到处找示例代码和依赖包。
- stater 分为两类,一类是官方提供,命名为 spring-boot-stater-{name},一类是非官方的stater ,命名为:{name}- spring-boot-stater
- 能够提前配置好spring 整合相关的配置和依赖,不用再去关心框架整合带来的问题
spring boot的依赖管理
- 导入stater就可以一次导入所有相关的依赖
- 每个springboot项目都有一个父项目
spring-boot-starter-parent
parent的父项目是spring-boot-dependencies
- dependencies 可以称为版本仲裁中心,其中定义了各种常见的 jar 包的版本,所以默认可以不写版本
- 如果子项目需要导入其他版本,可以使用maven的就近原则,子项目声明就会使用子项目的,不写就使用的是父项目的
- 如果是第三方的jar包,就需要自行声明版本
SpringApplication
- 是整个springboot的核心api
- @SpringBootApplication标准的类是主程序类
profiles 提供了环境隔离能力,可以快速切换开发、测试、生产环境
- 标识环境:指定哪些组件、配置在哪个环境生效
- 切换环境:这个环境对应的所有组件和配置就应该生效
Profile 配置文件
application-{profile}.properties
可以作为指定环境的配置文件。- 激活这个环境,配置就会生效。最终生效的所有配置是
-
application.properties
:主配置文件,任意时候都生效application-{profile}.properties
:指定环境配置文件,激活指定环境生效
spring.profiles.active
需要配置在application.properties
中,配置在其他带{profile}
的配置文件中是不生效的- 主配置和激活的配置文件都生效,优先以激活的配置文件为准
- profile优先级 > application 配置文件
yaml文件
- yaml相比properties文件来说,层次分明可读性更强,在配置很多的时候优点很明显
- 大小写敏感,使用缩进来表示层级关系,缩进时的空格数不重要,但是同层级的属性左侧必须对齐
- 表示数组时, 一个
-
代表一个元素 - 在配置字符时,单引号不会转义,双引号会转义
- 配置大文本时,
|
开头会保留大文本的格式;>
开头如果没有缩进会把换行压缩成空格,如果有缩进会保留格式
外部化配置
- 可以线上快速修改配置,并应用最新配置
- SpringBoot 使用 配置优先级+ 外部配置 简化配置更新、简化运维。
- 只需要给
jar
应用所在的文件夹放一个application.properties
最新配置文件,重启项目就能自动应用最新配置 - Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码,可以使用各种外部配置源,包括Java Properties文件、YAML文件、环境变量和命令行参数。
- 可以使用@Value获取值,也可以用@ConfigurationProperties将所有属性绑定到java object中
配置文件优先级如下:(后面覆盖前面)
- jar 包内的application.properties/yml
- jar 包内的application-{profile}.properties/yml
- jar 包外的application.properties/yml
- jar 包外的application-{profile}.properties/yml
- 也就是
包外 > 包内
,所以只需要给jar
应用所在的文件夹放一个application.properties
最新配置文件,重启项目就能自动应用最新配置 - 建议使用一种格式的配置文件,如果
.properties
和.yml
同时存在,则.properties
优先 - 同级情况下
profile配置 > application配置
规律:最外层的最优先。
- 命令行 > 所有
- 包外 > 包内
- config目录 > 根目录
- profile > application
配置不同就都生效(互补),配置相同高优先级覆盖低优先级
常用注解
- 用于配置的注解
- @Configuration :用于定义配置类,指出该类是 Bean 配置的信息源,相当于传统的xml配置文件
- @Bean : 作用与方法上,使这个方法产生一个bean对象 ,交给Spring容器管理,bean默认的名字是方法名,也支持别名@Bean(“xx-name”)
- @SpringBootConfiguration :同样是定义配置类,效果上等同于@Configuration
- @Import :导入额外的配置信息,功能类似XML配置的,用来导入配置类,可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar的类,导入的组件名称默认是全类名
- @ComponentScan:组件扫描。让spring Boot扫描到Configuration类并把它加入到程序上下文。
- @ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。
- @Component :把普通pojo实例化到spring容器
- @Scope作用域注解
- @Scope在和@Component注解一起修饰在类上,作为类级别注解时,@Scope表示该类实例的范围
- 在和@Bean一起修饰在方法上,作为方法级别注解时,@Scope表示该方法返回的实例的范围。
- 条件注解
- @Conditional注解它的作用是按照一定的条件进行判断,满足条件给容器注册bean。
- 除了@Conditional注解外,springboot通过@Conditional注解又扩展了很多注解出来,如下@ConditionalOnBean、@ConditionalOnClass等等
- 属性绑定
- @ConfigurationProperties(prefix = “pre”) 只要在 Bean 上添加上了这个注解,指定好配置文件的前缀,那么对应的配置文件数据就会自动填充到 Bean 中
- @EnableConfigurationProperties(XXX.class)开启某个类的属性绑定,用于快速注册注解,可以用于导入第三方写好的属性绑定配置类
- @controller :用于标注控制层。这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层),
@Service标识的类中的方法可以继续调用@Resposity标识的接口实现类(Dao层/持久层)。 - @Service :注入dao,用于标注服务层(业务逻辑层),主要用来进行业务的逻辑处理
- @Repository:实现dao访问,用于标注数据访问层(Dao层/持久层)
- @Entity :实体类注解
- @Autowired:自动导入
- @Autowired注解作用在构造函数、方法、方法参数、类字段以及注解上
- @Autowired注解可以实现Bean的自动注入
@requestmapping注解
- @RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上
- 用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法
- 用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping 和 GetMapping 的不同之处在哪里
- RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
- GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。
定时任务用到的注解:
- 要使用@Scheduled注解,首先需要在启动类添加@EnableScheduling,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@Scheduled注解,执行计划任务
- 创建一个业务处理类,将该类注入到Spring容器之中(@Component),在类中创建需要处理的业务方法
- 在该方法上面使用@Scheduled注解,使用@Scheduled时设置corn的值来设置业务处理的间隔时间
- corn六个位置参数分别表示:
- 秒(0~59) 例如0/5表示每5秒
- 分(0~59)
- 时(0~23)
- 日(0~31)的某天,需计算
- 月(0~11)
- 周几( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)
springboot注解的特性
- 简化MAVEN配置
- 自动配置Spring
- 开箱即用,没有代码生成,也无需XML配置