spring boot 基础特性

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配置
相关推荐
蓝染-惣右介2 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习3 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose5 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热7 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余8 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp8 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang11 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
bjzhang7516 分钟前
SpringBoot开发——Maven多模块工程最佳实践及详细示例
spring boot·maven·maven多模块工程
一直学习永不止步16 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
hummhumm30 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j