思维导图:https://www.edrawsoft.cn/viewer/public/s/72a06689197636

1.springboot是一个快速整合第三方框架,简化XML配置完全采用注解化,内置http服务器(jetty和tomcat),最总以java应用程序进行执行(默认端口8080)

2.@RestController表示该类中的所有方法返回json字符创(@Controller+@ResponseBody)

3.springboot启动
启动原理:springmvc注解方式启用,内置http服务器(默认是tomcat)
启动方式:@SpringbootApplication注解在含有main方法的根类上(最简单方式)

4.配置文件:
springboot项目的pom文件需要引入父类依赖spring-boot-starter-parent整合第三方常用框架依赖信息
springboot整合springmvc需要引入spring-boot-starter-web使用maven依赖继承关系整合
maven启动springboot项目需要指定jar的主函数入口spring-boot-maven-plugin

5.小项目使用AOP统一处理web请求日志(@Before/@After/@AfterReturning)
备注:小项目一般把日志半年左右迁移到云备份nosql数据库中。传统方法把日志写到磁盘上有很大缺点,可使用分布式日志收集系统(kafka/chukwa/Flume/Lagstash)

6.springboot创建GlobalException(加注解@ControllerAdvice(basePackages="com.it.conttoller")指定扫包范围)来捕获全局异常

7.lombok底层使用字节码技术ASM修改字节码文件生成get、set方法等,编译后还是会生成对应方法,简化代码(@Data=@Gatter+@Setter)
备注:下载好的jar包放到eclipse安装目录中,eclipse.ini最下面添加配置:-Xbootclasspath/a:lombok.jar -javaagent:lombok.jar,pom中加入依赖

8.使用@EnableAsync就可以使用多线程,写在@SpringBootApplication(spring项目启动类)或者@Configuration(spring项目配置类)上,AsyncRestTemplate异步非阻塞发送http请求

9.使用@Async就可以定义一个线程任务。通过spring给我们提供的ThreadPoolTaskExecutor就可以使用线程池
--类内部调用不会实现异步(通过spring代理机制实现异步,类内调用不走代理机制),及@Async放在private方法上面不生效
--返回值为void和Future可以,返回对象为null,返回基本类型报错AopInvocationException

10.@Value自定义参数注入,项目启动时加载,加载顺序在static资源后面

11.spring项目多环境配置:多application-**.properties,单application.properties,通过spring.profiles.active=**指定项目使用的配置文件

12.springboot整合mybatis注意事项:mapper层不需要添加注解,但是一定要在启动类上加上@MapperScan(basePackages={"com.*.mapper1","com.*.mapper2"}),就不用在每个mapper上加@Mapper

13.springboot默认集成事务,只需要在方法上加@Transactional就行(不需要@EnableTractional),方法执行完才能在数据库看到效果
spring事务分类:声明事务和编程事务;事务原理:AOP技术环绕通知进行拦截;注意事项:不要try,抛出给外层

14.springboot整合多数据源:分包名和注解方式,需要自定义数据源连接信息
多数据源事务不能只写@Transactional,需要用@Transactional(transactionManager="**1")指定对应自定义数据源中的事务管理器

15.devtools热部署原理:使用类加载器(classloader)重新读取字节码文件到jvm内存,有2个classloader,一个加载不会改变的第三方jar包,一个加载会改变的类,代码修改后,第二个classloader被丢弃重新创建一个classloader,实现较快重启
手写热部署功能:监听class文件是否发生改变(版本号或者修改时间),如果class文件发生改变就是用classloader重新读取
热部署不推荐在生产环境使用(防止集群环境不同服务器读取的字节码不同,大项目会特别占用内存很卡),一般用于本地开发提高效率

16.springboot性能优化
1)扫包优化:默认使用@SpringbootApplication(等同@Configuration+@EnableAutoConfiguration+@ConponentScan)会触发自动配置和组件扫描(递归扫包),启动时间长,加载了多余的实例和CPU消耗
2)JVM参数调优(减少垃圾回收次数):-XX:+PrintGCDetails -Xmx512M -Xms512M(打印详细GC日志,最大堆内存和初始堆内存,默认4G),太小会频繁触发GC
设置方式:1.内部运行设置在eclipse中的VM agments设置;2.外部运行设置用 java server -Xms512M -Xms512M -jar xxx.jar
3)默认tomcat容器修改为undertow(tomcat吞吐量5000undertow8000)

17.监控中心
针对微服务服务监控,服务器内存变化(堆内存、线程、日志管理等)、监测服务配置连接地址是否可用(模拟访问、懒加载)、统计现在容器中
多少个bean、统计springmvc中@RequestMapping(统计http接口数)。
AdminUi底层使用Actuator监控(没有界面,返回json)实现可视化界面

18.@Scheduled(initialDelay=1000, fixedDelay=2000)实现定时任务
--集群/负载均衡环境使用Quartz单独出来一个项目
注意:1、在Application.java同级及子集路径下;2.Application上添加@EnableScheduling

19.@Cacheable、@CachePut、@CacheEvict、@CacheConfig
@CacheConfig:一次性声明@Cacheable()里面都有一个value=“xxx”的属性
@CachEvict:的作用 主要针对方法配置,能够根据一定的条件对缓存进行清空
@CachePut:确保方法被执行,返回值记录到缓存中
@Cacheable:重复使用相同参数调用方法,方法本身不会被执行,方法的结果直接从缓存中找到
总结:@CachePut和@Cacheable这两个标签可以结合使用,当需要根据请求改变值的时候,利用@CachePut将值改变并写入到缓存中,而@Cacheable标签除了第一次之外,一直是取的缓存的值。注意结合使用时需要注意两点:
1、必须是同一个缓存实例。
2、key值必须是相同的。
注解失效时间+主动刷新缓存:https://blog.csdn.net/huanghongfei1/article/details/61195650
定时清除缓存: @Scheduled(cron="0 0,30,* * * ?")
@CacheEvict(cacheNames="aa",allEntries=true)
--集群环境可使用成熟缓存服务器,比如redis

springboot常见问题解决方案:
待续...

springboot学习小记的更多相关文章

  1. springboot 学习资源推荐

    springboot 是什么?对于构建生产就绪的Spring应用程序有一个看法. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.(这是springboot的官方介绍) 我们为什么要学 ...

  2. mongodb入门学习小记

    Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...

  3. javascript学习小记(一)

    大四了,课少了许多,突然之间就不知道学什么啦.整天在宿舍混着日子,很想学习就是感觉没有一点头绪,昨天看了电影激战.这种纠结的情绪让我都有点喘不上气啦!一点要找点事情干了,所以决定找个东西开始学习.那就 ...

  4. js 正则学习小记之匹配字符串

    原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...

  5. js 正则学习小记之左最长规则

    原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'.其实我们的本意是想得到整 ...

  6. js 正则学习小记之NFA引擎

    原文:js 正则学习小记之NFA引擎 之前一直认为自己正则还不错,在看 次碳酸钴,Barret Lee 等大神都把正则玩的出神入化后发现我只是个战五渣.  求抱大腿,求大神调教. 之前大致有个印象,正 ...

  7. js 正则学习小记之匹配字符串优化篇

    原文:js 正则学习小记之匹配字符串优化篇 昨天在<js 正则学习小记之匹配字符串>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯 ...

  8. CSS学习小记

    搜狗主页页面CSS学习小记 1.边框的处理   要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言 ...

  9. Springboot学习记录1--概念介绍以及环境搭建

    摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...

随机推荐

  1. JS文件写法操作,DOM基本操作

     js文件写法.规范 // 定义全局变量 var num = 0;//这个是用来记数的. // 页面加载完成 window.onload = funtion(){ intVar();//初始化变量 s ...

  2. TeamCity安装

    1 使用docker安装 安装手册:https://hub.docker.com/r/jetbrains/teamcity-server/2 安装包安装. docker run -it --name ...

  3. 安装redis报错 you need tcl 8.5 or newer in order to run redis test

    解决方法: wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz tar -zxvf tcl8.6.1-src.tar.gz -C ...

  4. MySQL_Key值(MUL、PRI、NUL)

    查询表结构: mysql> describe cc; +----------+-----------+------+-----+---------+-------+ | Field | Type ...

  5. 【视频合集】极客时间 react实战进阶45讲 【更新中】

    https://up2.v.sharedaka.com/video/ochvq0AVfpa71A24bmugS5EewhFM1553702519936.mp4 01 React出现的历史背景及特性介绍 ...

  6. Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客

    Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...

  7. Java集合中的细节

    integer数据对比 对于Integer var = ? 在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值 ...

  8. Unity3D制作红色射线

    1.在发射射线的位置创建一个空物体用于存储发射点的位置信息. 2.制作射线,为发射射线物体添加LineRenderer组件  制作Material材质并把其类型改为Particles/Addictiv ...

  9. PowerShell自定义函数定义及调用

    PowerShell是一种命令集,也有自己的语法定义及函数.本文主要介绍如何自定义powershell函数及如何调用,当初在写PowerShell自定义函数的时候查阅了很多资料都没找到如何调用自定义函 ...

  10. 使用NVM管理Node - Windows

    安装 NVM NVM 下载:https://github.com/coreybutler/nvm-windows 安装 Node 注意:如果没有FQ默认源可能安装npm失败,请参考下一节“安装 NPM ...