思维导图: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. Weekly Contest 119

    第一题: 973. K Closest Points to Origin  We have a list of points on the plane.  Find the K closest poi ...

  2. vue - 列表显示(列互相影响,全选控制,更新数据)

    要实现的效果为:全选,且列A列B互相影响,列B勾选则列A一定勾选,列A取消勾选,则相应列B取消勾选 数组 vue中列表渲染有些不是相应式的 var list=[ { a:'aaaa', b:'ddd' ...

  3. Overture小课堂之如何演绎钢琴滑音

    在我们学习钢琴和学习使用Overture时,要学习如何弹奏和使用滑音.那么我们先来看看什么是滑音,如何使用钢琴演绎,在Overture里滑音又在哪里呢? 滑音,在音乐术语中通常指一种装饰音和演奏指法. ...

  4. Java集合与泛型中的陷阱

    List,List<Object>区别 List<Integer> t1 = new ArrayList<>(); // 编译通过 List t2 = t1; // ...

  5. java解压多层目录中多个压缩文件和处理压缩文件中有内层目录的情况

    代码: package com.xiaobai; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce ...

  6. mysql基础篇(上篇)

    一.数据库 1.数据库介绍 2.RDBMS专业术语 3.MySQL数据库 4.常用数据库命令 1.数据库介绍 :什么是数据库 数据库就是按照数据结构来组织.存储和管理数据的仓库. 我们常常讲的数据库往 ...

  7. ZJOI-2017 R2 游记

    来说说考试(之前的事明天再补): 开始看了一遍所有题目,感觉第二题最可做的样子(ZJOI R1树状数组,HNOI splay 你们西方什么题我还没见过,淦!),大概感觉了一下所有题. T1:k=1直接 ...

  8. SAM宏观生态学空间分析帮助文档

    宏观生态学分析软件帮助文档: 引言: 该软件是由布鲁塞尔..大学开发,目的是提供一个综合的空间分析计算平台,主要针对的是宏观生态学数据.该软件可以从网站...上自由获取,该软件的主要特征以及发表在20 ...

  9. 常见adb指令

    1. adb –-help 查看帮助文档 2. adb start-server 当adb没有启动或被手动杀掉时,可以使用该命令启动服务 3. adb kill-server 杀死adb服务 4. a ...

  10. 添加并删除Marker

    var data=new Array(); // 定位.显示内容 function setLocation(x,y,name,time,speed,direction,GPSstatus,carsta ...