一篇博客带你轻松应对Springboot面试
1. SpringBoot简介
SpringBoot是简化Spring应用开发的一个框架。他整合了Spring的技术栈,提供各种标准化的默认配置。使得我们可以快速开发Spring项目,免掉xml配置的麻烦。降低Spring项目的成本。
2. SpringBoot的优缺点
使编码配置部署都变得很简单。缺点可能就是自动注入的bean,不是特别清楚,有可能会冲突。
3. SpringBoot如何固定版本
一种是parenet的时候直接固定。
一种是通过dependcy来固定,因为可能当前项目已经有父项目。

4. SpringBoot的使用方式
maven中父项目导入Springboot的启动器。然后编写一个主程序打上SpringBootApplication注解。通过run方法就可以启动。
5. SpringBoot自动配置原理
首先可以看到启动类上面有一个SpringBootApplication注解,点进去之后,又EnableAutoConfiguration注解。然后再进去,发现有个@Import注解,其导入的是EnableAutoConfigurationImportSelector类。再看这个类,他是集成了一个抽象的AutoConfigutationimportSelector。再往上就是接口ImportSelector。然后如果实现了接口的selectImport接口就会将其中的返回的数组全部加载到Spring容器中。其中实现的最主要的地方是getCandidateConfigurations方法。那个方法内部实现就是回去读取meta-inf下的spring.factories。所以主要在那里面配置的类就都会被自动加载。
6. SpringBoot配置文件注入

注入实体类中,实体类可以使用@ConfigurationProperties(prefix = "person")注解。

7. @Value和@ConfigurationProperties比较

8. @PropertySource
加载指定的配置文件。如下,如果不声明的话,将从主配置文件加载。

9. @ImportResource
导入Spring的配置文件,让配置文件里面的内容生效;这种方式比如一个类没有使用@Componet注解注册进容器,则使用自动装配autowired找不到。引入文件后,即可找到。
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@**ImportResource**标注在一个配置类上

10. springboot的profile加载
在配置文件的时候,我们可以建立多个。用-进行结尾。通过主配置文件,配置profiles的active就可以指定加载文件。
在同一个文件中,yml文件支持文档块的写法,为---。

11. SpringBoot激活指定profile的几种方式
第一种:直接在配置文件中通过active指定
第二种:通过java -jar 的参数指定


第三种:通过虚拟机参数

12. SpringBoot项目内部配置文件加载顺序
顺序如下;


优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;**互补配置**;
我们还可以通过spring.config.location来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

13. SpringBoot外部配置文件加载顺序
这个挺多的,我们就几个重要的。
高优先级的会覆盖低优先级的。
命令行上的参数配置是优先级最高的。
jar包外的带profile的配置文件。
jar包内的带profile的配置文件。
jar包外的不带profile的配置文件。
jar包内的不带profile的配置文件。
14. Springboot日志关系
SpringBoot默认使用的slf4j+logback。引入logging-starter就可以使用。能自动适配其他日志。只需要将日志里面的commons-logging移除。就会自动引入其他日志。
使用LoggerFactory可以获得logger。通过logger就可以记录日志。
日志的一些配置
logging.level.com.atguigu=trace 指定打印级别
logging.file=G:/springboot.log 指定日志生成路径
logging.path=/spring/log 指定日志生成相对路径
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n 指定控制台输出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== 指定文件中日志输出格式
15. SpringBoot如何扩展SpringMVC的配置
通过建立自己的类继承WebMvcConfigurerAdapter,在类上面打上注解@Configuration。然后重写里面的方法即可。容器中的所有的WebMvcConfigurer会一起起作用。

如果我们不想使用mvc的自动配置,全部使用自己的。可以在配置类上增加注解@EnableWebMvc。这个注解可以导入一个webmvcconfigurationsupport的类。然后mvc的自动配置类上的注解有这么一句话,有一个条件注解,当没有上面那个类的时候,才生效。
16. SpringBoot如何注册filter,servlet,listener
编写好一个servlet后,声明一个类,返回ServletRegistrationBean。通过里面的方法将servlet包装一下返回。


编写一个filter。通过FilterRegister包装。


编写一个listener,实现注册bean。


17. SpringBoot切换成undertow
先排除掉tomcat,然后再引入undertow就行了。

18. SpringBoot的任务
异步任务在启动类上,增加注解@EnableAsync,此时就开启了。然后对于异步的方法,打上注解@Async。
定时任务,在启动类上,打上注解@EnableScheduling,需要定时的方法使用@Scheduled注解。这里面分为秒,分,小时,日期,月份,星期。

邮件任务
引入邮件任务启动器。在配置文件中进行配置。通过javamailsenderimpl来发送。可以发送简单的邮件和复杂的邮件SimpleMailMessage和MimeMessage。
19. SpringBoot热部署
jrebal是收费的。
一般使用springboot-dev-tool。通过ctrl+f9进行热部署。开启idea的自动编译。
20. SpringBoot的监控
引入actuatro的监控器。配置文件需要配置安全关闭。management.security.enabled=false。可以配置endpoint的shutdown的enable开启,就可以直接关闭了。
21. SpringBoot整合redis
引入redis的启动器。data-redis。引入后再配置文件进行配置redis的host。然后通过redistemplate就可以进行操作了。会乱码,默认使用的是jdk的序列化json器。需要改成jackson。自己实现一个RedisTmeplate。泛型为object,object。再实现CacheManager。就会发现缓存变成json形式了。

一篇博客带你轻松应对Springboot面试的更多相关文章
- 一篇博客带你轻松应对java面试中的多线程与高并发
1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...
- 一篇博客带你入门Flask
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- 鸿蒙内核源码分析(异常接管篇) | 社会很单纯 , 复杂的是人 | 百篇博客分析OpenHarmony源码 | v39.03
百篇博客系列篇.本篇为: v39.xx 鸿蒙内核源码分析(异常接管篇) | 社会很单纯,复杂的是人 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU ...
- v80.01 鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下) | 百篇博客分析OpenHarmony源码
百篇博客分析|本篇为:(内核态锁篇) | 如何实现快锁Futex(下) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...
- 通通的最后一篇博客(附自制html5平面射击小游戏一枚)
这是我最后一篇博客了,由于本人的人生规划吧,以后应该也写不出什么好的技术文章了,到现在在博客园写了2年, 今天一看,我也有了120个粉丝,好几万的浏览量,感谢大家的支持啊~~ 半年没有写博客了,由于半 ...
- 第一篇博客 ---- 分享关于Maven使用的一些技巧
Maven环境搭建 在官网上下载maven安装包,地址:http://maven.apache.org/download.cgi . 解压文件到电脑坐在盘符目录,如E:\apache-maven-3. ...
- 小白两篇博客熟练操作MySQL 之 第二篇
小白两篇博客熟练操作MySQL 之 第二篇 一. 视图 视图是一个虚拟表,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集, 并可以将其当做表来使用. s ...
- 鸿蒙内核源码分析(ELF解析篇) | 你要忘了她姐俩你就不是银 | 百篇博客分析OpenHarmony源码 | v53.02
百篇博客系列篇.本篇为: v53.xx 鸿蒙内核源码分析(ELF解析篇) | 你要忘了她姐俩你就不是银 | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应 ...
- 鸿蒙内核源码分析(信号生产篇) | 信号安装和发送过程是怎样的? | 百篇博客分析OpenHarmony源码 | v48.03
百篇博客系列篇.本篇为: v48.xx 鸿蒙内核源码分析(信号生产篇) | 年过半百,依然活力十足 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管 ...
随机推荐
- paddlehub Test on win10
conda 构建虚拟环境 1)虚拟环境下安装paddlepaddle 1.7 2)pip install paddlehub 3)添加环境变量hub_home,以免模型把c盘撑爆 4)下载的模型在.p ...
- 哈密顿绕行世界问题 HDU2181
题目大意都比较简单,用vector存一下图,然后爆搜就可以了. #include<bits/stdc++.h> using namespace std; ; vector<]; bo ...
- ATmega328P定时器详解
写这篇文章,纯粹是想为博客拉点点击量.在博客园,游客访问好像是不计入阅读量的,而作为一个十八线博主,注册用户的访问应该以搜索引擎为主,博客园首页为次,个位数的粉丝就别谈了. 所以,希望各位从搜索引擎点 ...
- XSS语义分析的阶段性总结(一)
本文作者:Kale 前言 由于X3Scan的研发已经有些进展了,所以对这一阶段的工作做一下总结!对于X3Scan的定位,我更加倾向于主动+被动的结合.主动的方面主要体现在可以主动抓取页面链接并发起请求 ...
- python 获取的json字符串取值
获取到的json字符串,然后对其取值 {u'result': {u'10.10.10.100': {u'status': u'OK', u'msg': u"{'listen': {'': s ...
- python中文语料分词处理,按字或者词cut_sentence
cut_sentence.py import string import jieba import jieba.posseg as psg import logging #关闭jieba日制 jieb ...
- Apache Hudi集成Apache Zeppelin实战
1. 简介 Apache Zeppelin 是一个提供交互数据分析且基于Web的笔记本.方便你做出可数据驱动的.可交互且可协作的精美文档,并且支持多种语言,包括 Scala(使用 Apache Spa ...
- apache虚拟主机配置-域名/IP和端口两种配置
由于百度上有非常详细的资料,我这里就转载而已:https://jingyan.baidu.com/article/4f7d5712d48a191a201927e0.html
- input type file onchange上传文件的过程中,同一个文件二次上传无效的问题。
不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...
- An example shows several CIM-XML extension headers
The example below shows several CIM-XML extension headers for a GetClass operation on the root/cimv2 ...