《springboot实战》
前⾔
⼤致翻了⼀下《springboot实战》这⼀本书,相⽐之前的⽂章,总体来说,没有什么⼲货,实战感觉也谈不上。仅当⼀本普通的科普读物,记录⼀下学习笔记。看完可以了解⼀些基本的知识,⼤致如下:
springboot的特性有哪些?
为什么在配置⽂件⾥⾯配置⼀些变量,springboot就能提供某些功能?
springboot内部⾃动配置原理是什么?内部如何实现?
常见的⼀些⾃定义配置有哪些?
springboot提供的actuator是什么?配置之后,有什么⽤?如何⾃⼰定制actuator?
⽬录
概述
起步依赖
⾃动配置
⾃定义配置
测试
Actuator
部署
总结
⼀. 概述
1. spring家族发展史
2002年,Rod Johson撰写了⼀本Expert One-on-One J2EE设计的书,提出了依赖注⼊的解决⽅案
2004年:spring1.0发布,依赖注⼊和声明式事务意味着组件直接不存在紧耦合,改变了开发企业级java应⽤程序的⽅式
2006年:spring2.0发布,下载量超过100w, 可以在配置⾥使⽤⾃定义的xml命名空间,更简单的配置让spring更好使⽤
2007年,spring2.5发布,更优雅的⾯向注解的依赖注⼊模型(@Component和@Autowired)和⾯向注解的spring MVC编程模型2009年,spring3.0发布,全新的javabean配置取代xml,@Enable开头的注解得到完善,可以书写没有xml的程序
2013年,spring4.0发布,spring框架的⼀⼤进步,⽀持java8, 更⾼的第三⽅依赖,条件化配置,根据应⽤程序的classpath,环境等决定使⽤哪些配置
springboot:实现⾃动配置,起步依赖,actuator等
2. springboot发展史
2012年:Mike Youngstrom在spring jira中创建了⼀个功能需求:在spring框架中⽀持⽆容器web应⽤程序
2013年:开始研发该需求
2014年:springboot 1.0.0版本发布
2014年:springboot 1.1版本: ⽀持elasticsearch和Apache solr
2015年:springboot 1.2版本:升级到tomcat8,spring4.1,⽀持SpringBootApplication注解
2016年:springboot 1.3版本:⽀持spring-boot-devtools,部门⾃动配置和可执⾏的jar
2017年1⽉:springboot 1.4:分析穹顶失败和RestTemplateBuilder
2017年2⽉:sprinboot 1.5:⽀持kafka,动态修改应⽤程序⽇志级别
2018年3⽉:springboot2.0:基于java8,⽀持java9,⽀持Quartz,⽀持嵌⼊netty
3. springboot特性
⾃动配置:⾃动根据配置⽂件的⼀些属性配置相应的bean,⽆需⼿动配置
起步依赖:⾃动管理jar包依赖
命令⾏界⾯:⾃动检测代码依赖哪个包
actuator:提供在运⾏时见识应⽤程序内部情况的能⼒
4. sprinboot不是什么
不是应⽤服务器:在应⽤程序⾥嵌⼊了⼀个servlet容器
没有引⼊任何形式的代码⽣成,只是利⽤了条件化配置特性以及maven的传递依赖解析实现⾃动配置
⼆. 起步依赖
1. 本质
起步依赖本质是⼀个maven项⽬对象模型(project object module,pom),定义了其他库的传递依赖。通过传递依赖,添加⼀个依赖项就相当于添加了⼀堆依赖项
2. 特点
只需添加⼀个依赖就替代繁琐的⼀堆依赖
不需要指定版本号,起步依赖⾃动定义好互相之间可以兼容的依赖版本
可以通过⾃定义版本号覆盖默认的版本号
spring系列框架有哪些通过exclusions配置,排除某些依赖
三. ⾃动配置
1. 原理:
利⽤了spring的条件化配置,允许配置存在于应⽤程序中,在满⾜某些特定条件之前都会忽略这个配置
2. 实现:
满⾜的条件:定义⼀个类XXX.java实现Condition接⼝,重写matches⽅法
使⽤:在要被初始化的bean前⾯使⽤@Conditional(XXX.class),即实现了条件化配置
3. springboot⾃定义的条件配置
ConditionalOnBean: 配置了特定的bean
ConditionalOnMissingBean: 没有配置特定的bean。关键注解,⽤户如果⾃定义了⼀个bean,就不会使⽤⾃动配置的bean。
ConditionalOnClass: classpath⾥有指定的bean
ConditionalOnMissingClass:classpth⾥缺少指定的bean
ConditionalOnExpression:特定的表达式为true
ConditionalOnJava:匹配特定的java版本
ConditionalOnProperty:特定的配置属性有⼀个明确值
ConditionalOnWebApplication: 是⼀个web应⽤程序
ConditionalOnNotWebApplication:不是⼀个web程序
4. 源码实例:
DataSourceAutoConfiguration使⽤了@ConditionalOnClass注解,classpath⾥需要有DataSource类和
EmbededDatabaseType类才会⾃动配置,否则配置就会被忽略。
使⽤spring security⾃动配置的条件
classpath中要有WebSecurityConfiguerAdapter类
没有⾃动配置WebSecurityConfigureAdapter实体类
是⼀个web应⽤程序
四. ⾃定义配置
使⽤⾃动配置可以不⽤⼿动配置bean,如果修改配置的某个参数,是否⾃动配置就不⽣效了呢? 答案是否定的,springboot提供了300多个⽤于微调的属性,可以⾃由掌握配置。
1. 属性配置来源(优先级由⾼到低,⾼覆盖低)
命令⾏参数
java:comp/env⾥的JNDI属性
JVM系统属性
操作系统环境变量
应⽤程序以外的application.properties或l
打包在应⽤程序内的application.properties或l(yml优先级⾼于properties)
通过@PropertySource标注的属性源
默认属性
2. ⾃动配置属性实例
2.1 配置嵌⼊式服务器
默认:tomcat的8080端⼝
修改端⼝:
server.port: 8081
复制代码
配置https服务:
server:
ssl:
key0-store: file: ///path/mykeys.jks
key-password: password
ssl-store-password: password2
复制代码
2.2 配置⽇志
默认:logback输出info级别到控制台
⾃定义配置:
⽅法⼀:修改默认属性
logging:
path: /var/logs/
file: warn.log
level:
root: warn
org.springframework.security:Debug
复制代码
⽅法⼆: ⾃定义⼀个l配置⽂件
⽅法三:⾃定义⽂件名的配置⽂件
logging:
config:
l
复制代码
2.3 配置数据源:
⽆需指定jdbc驱动,会根据url⾃动识别
```
spring:
datasource:
url: xxx
username: xxx
password: xxx
```
复制代码
2.4 配置⾃定义属性
在l中指定配置属性的名称和值
在配置类中使⽤@ConfigurationProperties(prefix="XX")
在配置类中声明要注⼊的变量和setter⽅法
3. profile配置
使⽤@Profile("production") 注解
配置不同的application-{profile}.properties或yml⽂件
在同⼀个yml⽂件中配置,⽤---分隔开
五. 测试
1. spring测试
@RunWith(SpringJunit4ClassRunner.class) 开启spring集成测试@ContextConfiguration 指定加载应⽤程序上下⽂
2. springboot测试
@SpringApplicationConfiguration 开启springboot集成测试
@WebAppConfiguration 开启web测试
MockMvc 在⼀个模拟的servlet容器⾥测试
@WebIntegrationTest 启动⼀个嵌⼊式Servlet容器,配合RestTemplate测试
3. html页⾯测试
Selenium⼯具
六. Actuator
1. 概述
提供很多⽣产级的特性,⽐如监控和度量springboot应⽤程序。提供很多端点⽤于了解应⽤程序内部运⾏状况2. 端点分类
2.1 bean
获取上下⽂中所有注⼊的bean
包括五类信息
bean: 名称或id
resource:class⽂件的物理位置,url格式
dependencies:注⼊的bean列表
scope:作⽤域
type:java类型
2.2 autoconfig
列出了⾃动配置时哪些条件满⾜,哪些条件不满⾜,为什么会⽣成某个bean
提供众多带有@Conditional注解的配置类
2.3 env
列出所有环境属性列表,⽆论是否被⽤到
包括环境变量,JVM属性,命令⾏参数,配置⽂件属性
属性⾥⾯带有password,secret,key的属性都会被隐藏,只显⽰*
2.4 mappings
列出web界⾯的控制器和请求处理⽅法
2.5 metrics
列出⼀系列应⽤程序度量信息
gc.*: 垃圾收集相关。java.lang.management.GarbageCollectorMXBean得到
mem.*: 内存相关。java.lang.RunTime
heap.*: 堆相关。java.lang.management.MemoryUsage
classes.*: 类加载器相关。
processors,uptime,instance等:系统相关
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论