springboot设计理念
可运行、独立的、生产级别的基于spring的应用程序
设计目标
-
为所有spring开发提供更快可通用的入门体验
-
开箱即用,根据需求快速调整默认值
-
提供大象项目通用的一系列非功能性功能
-
绝对没有代码生成,不需要xml配置
springboot中通用约定
-
注解扫描的包目录basepackage为启动类main函数入口所在的包路径
-
配置未见约定是classpath目录下的application.yml或者application.properties
-
web开发的静态文件放在classpath,访问的顺序是:/META-INFO/resources--->resources-->static-->public
-
web开发中页面模板,约定放在classpath目录,/templates/目录下
系统配置自动装载机制
外部参数配置信息加载
Spring应用程序可以通过属性文件,yaml文件,环境变量和命令行参数等方式的外部化参数配置
-
启动时命令行传参java -jar app.jar --name="test"
-
Springboot配置信息中的特殊值:SPRING_APPLICATION_JSON={"name","test"}
-
如果是web应用,可以读取ServletConfig init参数
-
如果是web应用,可以读取ServletContext init参数
-
JNDI属性来自java.comp/env
-
java系统属性(System.getProperties)
-
操作系统环境变量
-
配置文件application.properties,application.yml,application.{profile}.properties,application.{profile}.yml
-
@PropertySources注解导入的配置:@PropertySource(value={"person.properties"})
-
程序入口通过SpringApplication.setDefaultProperties方法设定的参数配置
环境化配置
profile机制
-
Spring配置文件提供的一种隔离应用程序配置的方法,使其仅在特定环境中试用
-
可通过profile指定bean的应用环境
-
可通过profile指定不同环境的配置参数值
如何指定profile
通过配置参数spring,profiles,active来指定应用启用的profiles。默认default
-
在环境变量中指定:JVM参数、命令行程序参数、application.properties
-
代码中指定:springApplication.setAddtionalProfiles("dev.test");
开发中使用
-
Configuration类或者Bean定义方法上,都可以通过添加@Profie("dev")注解,实现指定环境下生效
-
配置文件中:
<beans profile="dev"><bean...>...</bean></beans>
配置文件
存放位置
-
当前项目运行的盘符/config文件夹下面:file:./config/
-
当前项目运行的目录下面(命令执行所在目录):file:./
-
classpath下面的config文件夹:classpath:./config
-
classpath的根目录(平常使用的这种):classpath:/
上述配置文件按优先级排列,排在上面的位置会覆盖优先级较低的配置
格式
-
properties
-
示例:spring.datebase.username=test
-
-
yaml
-
大小写敏感
-
使用空格缩进表示层级,同一层级的左侧对齐
-
map键值对通过":"分割
-
list列表元素通过"-"表示
-
参数使用
-
@Value("${my.name}")注解,将指定的参数配置注入到属性
-
注入environment对象
//伪代码,注入env对象
@Autowired
Environment environment;
//使用示例
environment.getProperty("name");
starter快速集成机制
介绍
作用
启动器starter包含许多依赖项,这些依赖项是使项目快速启动和运行所需的依赖项
例如:通过配置spring-boot-starter-data-redis ,可以快捷的使用spring对redis进行数据访问
命名规范
官方开发的starter遵循类似的命名模式:spring-boot-starter-*
第三方starter命名应当遵循thirdpartyproject-spring-boot-starter
常用starter
-
spring-boot-starter-jdbc
-
spring-boot-starter-data-redis
-
spring-boot-starter-web
-
spring-boot-starter-actuator
自研starter步骤
-
建工程
-
引入spring-boot-start、spring-boot-autoconfigure、第三方jar
-
如需生成配置元信息、加入spring-boot-configuration-processor依赖
-
编写自动配置类
-
配置发现配置文件:META-INF/spring.factories
-
打包发布
使用actuator管理spring程序
介绍
-
Spring Boot Actuator提供http(或JMX)端点来实现应用程序的监视和管理、收集运行状况等功能
引入spring-boot-starter-actuator可启动这些功能
-
默认情况下,通过访问/actuator可以看到所有启动的端点,也可以通过配置修改这个路径地址
例如修改为:management.endpoints.web.base-path = /manage
端点配置
允许添加自己的端点,可以配置端点是否对外开放或关闭
-
设置默认关闭所有端点(默认开放启用了"health"和"info"
management.endpoints.enabled-by-default=false
-
启动指定的端点
management.endpoint.info.enabled = true
(启动哪个,黑体写哪个)
-
数据缓存
端点自动缓存对不带任何参数的读取操作的响应。要配置端点缓存响应的时间量
management.endpoint,<name>,cache.time-to-live = 10s
<name>需要使用对应的端点名称来代替
Http端点配置
端点讲解-Health健康检查
访问/actuator/health查看程序中组件检查项的运行状况信息,在出现故障时能及时发现。
SpringBoot默认提供了对redis、rabbitMQ、DataSource、MongoDB组件的检查项
端点讲解-日志配置
-
springboot日志配置
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
-
通过/acuator/loggers查看日志配置
-
运行时修改配置
curl -X POST -H 'Content-Type:application/json' -i 'http://127.0.0.1:8081/manage/loggers/ROOT' --data '
{"configuredLevel":"DEBUG"}
'
端点讲解-metrics
Metrics是生产应用中很重要的功能,简单可理解为对运行时具体功能的监控、Spring Boot中集成micrometer实现
自定义端点
可以理解为:"概念上类似SpringMVC的controller写法,却又是完全不同的一套API"
-
端点定义:@EndPoint或@WebEndPoint或@JmxEndPoint
-
端点操作:@ReadOperation、@WriteOperation、@DeleteOperation
-
参数接收:web环境下添加@Selector
@EndPoint(id = "myEndPoint")
@Component
public class MyEndPoint{
String name = "default";
@ReadOperation
public String getName(){
//Spring http端点的json格式
return "{\"name\":\""+name+"\"}"
}
}
快速理解JMX机制
java management extensions 提供了一种监视和管理应用程序的标准机制
tomcat、kafka、druid都是用的JMX技术来实现对外暴露管理接口和监控信息