思维导图: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. 安卓入门——————简单记账本的开发(用sqlite存储数据)(一)

    设计思想————首先要确定有几个页面.和每个页面的大致布局 由于是入门,我也是学习了不是很长的时间,所以项目比较low.... 第一个页面,也就是打开APP的首页面: 今天这个博客,先实现添加功能!: ...

  2. docker组件介绍

    一.Docker Client and Daemon(docker egine docker 引擎) docker是一个客户端工具,作用是发送 用户的请求给 dockerd 安装路径: /usr/bi ...

  3. hdu5686大数斐波那契

    Problem Description   度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多 ...

  4. HTTP简单解析

    一.简介 HTTP是一种基于TCP/IP的超文本传输协议,用于从WWW服务器传输超文本到本地浏览器. HTTP是一种基于客户端/服务器(C/S架构)的无状态.无连接.媒体独立的传输协议. HTTP是一 ...

  5. mybatis配置与使用

    一:Mybatis简介 1.名称由来 Mybatis原名叫ibatis.Mybatis一开始属于Apache,2010年从Apache转移到了GoogleCode这个组织中. 2.Mybatis概念 ...

  6. 用JSON.stringify处理循环引用对象

    通常,我们会用JSON.stringify把Javascript对象序列化成JSON格式,这在大多数情况下是够用的.但是,当你要转换的对象里存在循环引用时,问题就来了. js对象循环引用导致内存泄漏 ...

  7. windows 根据端口查看进行PID 并杀掉进程

    1. 首先用netstat -ano | find “端口号”查出进程号 明明有端口号是17568和18892, 如何确定是17568呢 2. takslist 查询当前的进行 3. 如何杀死进程呢  ...

  8. 简单理解epel源

    EPEL源-是什么全称   EPEL源   EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适 ...

  9. App 打包

    记录一下: 1. applicationIdSuffix 实现不同 ApplicationId 打包,buildTypes 中添加编译后会成功生成加对应后缀的ApplicationId.在 produ ...

  10. React子组件和父组件通信

    React子组件和父组件通信包括以下几个方面: 子组件获取父组件属性:props或者state 子组件调用父组件的方法 父组件获取子组件的属性:props或者state 父组件调用子组件的方法 我们从 ...