springboot知识点
1、入口类和@SpringBootApplication
程序从main方法开始运行。使用SpringApplication.run()加载主程序类,主程序类需要标注 @SpringBootApplication,@EnableAutoConfiguration是核心注解;@Import导入所有的自动配置场景,@AutoConfigurationPackage定义默认的包扫描规则程序启动扫描加载主程序类所在的包以及下面所有子包的组件;
2、YAML语法
YAML基本语法:使用缩进表示层级关系,缩进时不允许使用Tab键,只允许使用空格。缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,大小写敏感
YAML 支持的三种数据结构:对象:键值对的集合,数组:一组按次序排列的值,字面量:单个的、不可再分的值。
3、配置文件值注入
属性名匹配规则(Relaxed binding)
– person.firstName:使用标准方式
– person.first-name:大写用-
– person.first_name:大写用_
– PERSON_FIRST_NAME:
• 推荐系统属性使用这种写法
@ConfigurationProperties
– 与@Bean结合为属性赋值
– 与@PropertySource(只能用于properties文件)结合读取指定文件
@ConfigurationProperties Validation
– 支持JSR303进行配置文件值校验;
@ImportResource读取外部配置文件
4、配置文件占位符
RandomValuePropertySource:配置文件中可以使用随机数
r
a
n
d
o
m
.
v
a
l
u
e
、
{random.value}、
random.value、{random.int}、${random.long}
r
a
n
d
o
m
.
i
n
t
(
10
)
、
{random.int(10)}、
random.int(10)、{random.int[1024,65536]}
属性配置占位符
可以在配置文件中引用前面配置过的属性(优先级前面配置过的这里都能用)。
– ${app.name:默认值}来指定找不到属性时的默认值
5、Profile
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、
指定参数等方式快速切换环境
1、多profile文件形式:
– 格式:application-{profile}.properties/yml:
• application-dev.properties、application-prod.properties
2、多profile文档块模式:
3、激活方式:
– 命令行 --spring.profiles.active=dev
– 配置文件 spring.profiles.active=dev
– jvm参数 –Dspring.profiles.active=dev
6、配置文件加载位置
spring boot 启动会扫描以下位置的application.properties或者
application.yml文件作为Spring boot的默认配置文件
– file:./config/
– file:./
– classpath:/config/
– classpath:/
– 以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先
级配置内容会覆盖低优先级配置内容。
– 我们也可以通过配置spring.config.location来改变默认配置
7、自动配置原理
1、可以查看HttpEncodingAutoConfiguration
2、通用模式
– xxxAutoConfiguration:自动配置类
– xxxProperties:属性配置类
– yml/properties文件中能配置的值就来源于[属性配置类]
3、几个重要注解
– @Bean
– @Conditional
4、–debug=true查看详细的自动配置报告
8、web自动配置规则
1、WebMvcAutoConfiguration
2、WebMvcProperties
3、ViewResolver自动配置
4、静态资源自动映射
5、Formatter与Converter自动配置
6、HttpMessageConverter自动配置
7、静态首页
8、favicon
9、错误处理
9、Spring Boot启动配置原理
SpringApplication.run(主程序类)
– new SpringApplication(主程序类)
• 判断是否web应用
• 加载并保存所有ApplicationContextInitializer(META-INF/spring.factories),
• 加载并保存所有ApplicationListener
• 获取到主程序类
– run()
• 回调所有的SpringApplicationRunListener(META-INF/spring.factories)的starting
• 获取ApplicationArguments
• 准备环境&回调所有监听器( SpringApplicationRunListener )的environmentPrepared
• 打印banner信息
• 创建ioc容器对象(
– AnnotationConfigEmbeddedWebApplicationContext(web环境容器)
– AnnotationConfigApplicationContext(普通环境容器)
– run()
• 准备环境
– 执行ApplicationContextInitializer. initialize()
– 监听器SpringApplicationRunListener回调contextPrepared
– 加载主配置类定义信息
– 监听器SpringApplicationRunListener回调contextLoaded
• 刷新启动IOC容器;
– 扫描加载所有容器中的组件
– 包括从META-INF/spring.factories中获取的所有EnableAutoConfiguration组件
• 回调容器中所有的ApplicationRunner、CommandLineRunner的run方法
• 监听器SpringApplicationRunListener回调finished
10、自动配置
Spring Boot启动扫描所有jar包的META-INF/spring.factories中配置的
EnableAutoConfiguration组件
• spring-boot-autoconfigure.jar\META-INF\spring.factories有启动时需要加载的
EnableAutoConfiguration组件配置
• 配置文件中使用debug=true可以观看到当前启用的自动配置的信息
• 自动配置会为容器中添加大量组件
• Spring Boot在做任何功能都需要从容器中获取这个功能的组件
• Spring Boot 总是遵循一个标准;容器中有我们自己配置的组件就用我们配置的,没有就用自动配
置默认注册进来的组件;
11、自定义starters
自动装配Bean;
– 自动装配使用配置类(@Configuration)结合Spring4 提供的条件判断注解
@Conditional及Spring Boot的派生注解如@ConditionOnClass完成;
• 配置自动装配Bean;
– 将标注@Configuration的自动配置类,放在classpath下META
INF/spring.factories文件中,如:
自动装配顺序
– 在特定自动装配Class之前
• @AutoConfigureBefore
– 在特定自动装配Class之后
• @AutoConfigureAfter
– 指定顺序
• @AutoConfigureOrder
启动器(starter)
– 启动器模块是一个空 JAR 文件,仅提供辅助性依赖管理,这些依赖可能用于自动
装配或者其他类库
– 命名规约:
• 推荐使用以下命名规约;
• 官方命名空间
– 前缀:“spring-boot-starter-”
– 模式:spring-boot-starter-模块名
– 举例:spring-boot-starter-web、spring-boot-starter-actuator、spring-boot-starter-jdbc
• 自定义命名空间
– 后缀:“
-spring-boot-starter”
– 模式:模块-spring-boot-starter
– 举例:mybatis-spring-boot-starter
12、Spring缓存抽象
Spring从3.1开始定义了org.springframework.cache.Cache
和org.springframework.cache.CacheManager接口来统一不同的缓存技术;
并支持使用JCache(JSR-107)注解简化我们开发;
• Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;
• Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache ,
ConcurrentMapCache等;
• 每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否
已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法
并缓存结果后返回给用户。下次调用直接从缓存中获取。
• 使用Spring缓存抽象时我们需要关注以下两点;
1、确定方法需要被缓存以及他们的缓存策略
2、从缓存中读取之前缓存存储的数据
13、整合redis实现缓存
引入spring-boot-starter-data-redis
2. application.yml配置redis连接地址
3. 配置缓存
– @EnableCaching、
– CachingConfigurerSupport、
4. 测试使用缓存
5. 切换为其他缓存&CompositeCacheManager
14、分布式应用
在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用
全栈的Spring,Spring Boot+Spring Cloud。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成
本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干
的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服
务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,
用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个
调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利
用率的资源调度和治理中心(SOA)是关键
15、热部署
在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间
花费,我们希望不重启应用的情况下,程序可以自动部署(热部署)。有以下四
种情况,如何能实现热部署。
• 1、模板引擎
– 在Spring Boot中开发情况下禁用模板引擎的cache
– 页面模板改变ctrl+F9可以重新编译当前页面并生效
2、Spring Loaded
Spring官方提供的热部署程序,实现修改类文件的热部署
– 下载Spring Loaded(项目地址https://github.com/spring
projects/spring-loaded)
– 添加运行时参数;
-javaagent:C:/springloaded-1.2.5.RELEASE.jar –noverify
3、JRebel
– 收费的一个热部署软件
– 安装插件使用即可
4、Spring Boot Devtools(推荐)
– 引入依赖
org.springframework.boot
spring-boot-devtools
– IDEA必须做一些小调整
Intellij IEDA和Eclipse不同,Eclipse设置了自动编译之后,修改类它会自动编译,而IDEA在非RUN或DEBUG情况下
才会自动编译(前提是你已经设置了Auto-Compile)。
• 设置自动编译(settings-compiler-make project automatically)
• ctrl+shift+alt+/(maintenance)
• 勾选compiler.automake.allow.when.app.running
16、监控管理
通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过HTTP,JMX,SSH协议来进 行操作,自动得到审计、健康及指标信息等
• 步骤:
– 引入spring-boot-starter-actuator
– 通过http方式访问监控端点
– 可进行shutdown(POST 提交,此端点默认关闭)
17、定制端点信息
定制端点一般通过endpoints+端点名+属性名来设置。
– 修改端点id(endpoints.beans.id=mybeans)
– 开启远程应用关闭功能(endpoints.shutdown.enabled=true)
– 关闭端点(endpoints.beans.enabled=false)
– 开启所需端点
• endpoints.enabled=false
• endpoints.beans.enabled=true
– 定制端点访问路径
• management.context-path=/manage
– 关闭http端点
• management.port=-1