技术标签: spring boot 面试 java java主流框架
Tomcat是Apache基金下的一个轻量级的开源免费的Servlet容器,Tomcat本身包含了HTTP服务器,因此也可以视作单独的Web服务器。
Undertow是一款灵活的高性能Web服务器,采用Java语言开发,支持阻塞IO和非阻塞IO。由于Undertow采用Java语言开发,可以直接嵌入到Java项目中使用。同时, Undertow完全支持Servlet和Web Socket,在高并发情况下表现非常出色。
具体做法就是在项目的pom.xml 文件去除内置tomcat依赖并添加Undertow的依赖,即:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 去除内嵌tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
<!-- 去除内嵌tomcat -->
</dependency>
<!--添加Undertow的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--添加Undertow的依赖-->
还可已自定义配置Undertow容器的参数:
server:
undertow:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程。不要设置过大,如果过大,启动项目会报错:打开文件数过多
io-threads: 16
# 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程。它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
worker-threads: 256
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理。每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
buffer-size: 1024
# 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
buffers-per-region: 1024
# 是否分配的直接内存(NIO直接分配的堆外内存)
direct-buffers: true
(1)新建xml文件,设置每一个组件的id,全类名,属性的依赖注入等。获取ioc容器时读取这个xml文件。
(2)给每一个类上面添加注解@component@service@controller@repository表名这是组件,然后进行包扫描配置。就可以自动装配进IOC容器。
(1)使用注解@component@service@controller@repository表明是组件,只要类与MainApplication在同一个包下,就可以自动进行包扫描,自动装配进IOC容器。
(2)使用配置类。配置类能把外部引入类也能装进IOC容器。新建一个配置类,@Configuration 表示这是一个配置类。主要用于向IOC中注册组件。
配置类里面每一个方法都使用@Bean标签,表示这是其中一个组件。方法里直接new一个对象,返回给IOC容器。
组件名默认是方法名,注册的组件默认是单例的。
3)在配置类上使用@ImportResource(“classpath:beans.xml”)注解,复用以前的xml文件,就可自动装配用xml写的bean
它主要包含了三个注解@Configuration、@EnableAutoConfiguration、@ComponentScan
@Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
配置类,手动配置外部的类生成Bean装进IOC容器
@EnableAutoConfiguration
开启自动配置功能
@ComponentScan
配置包扫描路径,主要是把启动类同一个目录下的所有组件都给扫描装配到IOC里。
@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的
@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。她主要包含了2个注解@AutoConfigurationPackage
,@Import(AutoConfigurationImportSelector.class)
。`
条件装配:满足Conditional指定的条件,则进行组件注入
例如:@ConditionalOnMissingBean(name = “tom”)
//没有tom名字的Bean时,MyConfig类的Bean才能生效。(整个配置类里面的bean才注册)
SpringBoot会自动读取到properties、yml文件中的配置,在使用了@ConfigurationProperties(prefix = “mycar”)这个注解的组件上进行配置绑定。
若该类不能修改,则用这个方式
//@EnableConfigurationProperties(Car.class) // 开启Car类的配置绑定功能 //@ConfigurationProperties (prefix = “mycar”)//注入前缀为mycar的属性
//使用这种方式,就把注解放在配置类头上。
注意也需要在spring boot application头上使用@EnableConfigurationProperties
的注解开启自动配置功能。
@Value
比较适用于配置比较少的场景,而 @ConfigurationProperties
则更适用于有很多配置的情况。
@Value()需要填写前后缀整个配置名;而@ConfigurationProperties (prefix = “mycar”)匹配前缀后,只需要字段名与配置的后缀相同,就能自动注入,更方便快捷。
如:
@ConfigurationProperties(prefix = "oauth")
public class PropertiesConfiguration {
private String clientId;
private String clientSecret;
private String redirectUri;
private String grantType;
}
//配置
oauth:
client_id: id
client-secret: secret
redirect_uri: http://aisensiy.github.io
grantType: code
加载配置类–》配置类绑定配置文件指定值–》配置类给容器装配组件
private final Logger log = LoggerFactory.getLogger(当前类名.class);
只要静态资源放在类路径下,包括static、public、resources、/META-INF/resources ,那么springboot项目启动时,这些资源能直接在url地址上访问到
她的处理逻辑是:请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面。
静态资源访问前缀配置:访问的时候必须带有/res/, 才能访问到静态资源。
spring:
mvc:
static-path-pattern: /res/**
->
doDispatch(),将请求分配给对应的请求处理器MappingHandler,找到了对应的请求处理器在分配给 指定的Mapping方法处理。@PathVariable
路径变量,url中/类型的参数@RequestParam
获取请求参数(指问号后的参数,url?a=1&b=2)@RequestBody
获取请求体[POST]@CookieValue
获取Cookie值@RequestHeader
获取请求头@RequestAttribute
获取request域属性preHandle()
方法。
preHandle()
返回为true
。则执行下一个拦截器的preHandle()
false
。直接倒序执行所有已经执行了的拦截器的 afterCompletion();
。false
,直接跳出不执行目标方法。true
,才执行目标方法。postHandle()
方法。(成功执行目标方法后)afterCompletion()
。afterCompletion()
(成功页面渲染后)@ControllerAdvice
+@ExceptionHandler
处理全局异常;底层是 ExceptionHandlerExceptionResolver
支持的文章浏览阅读801次,点赞16次,收藏21次。嗨喽,大家好呀~这里是爱看美女的茜茜呐又到了学Python时刻~随着大数据和人工智能的发展,Python也与多种科技深深绑定。比如自动化测试,运维,爬虫,数据分析,机器学习,金融领域,后端开发,云计算,游戏开发都有涉及python画笑脸的源代码。万丈高楼平地起,Python这座大厦能够如此强大,就是拥有强大的成千上万的库的支持无数牛x的轮子在支持这座大厦,今天我们来一起梳理一下,俯瞰整个Python宝库。那么什么是库呢?从代码角度讲:库就是一堆类(class)和函数(function)的集合。_python中导入的库有什么用
文章浏览阅读191次。为什么80%的码农都做不了架构师?>>> ..._spring mvc通过filter实现url映射
文章浏览阅读946次。Splunk 对app 下面的inputs.conf 文件到 监控路径有严格的要求。_windows日志无法自动转发到splunk
文章浏览阅读551次,点赞12次,收藏5次。我尝试过ubuntu22.04系统和windows11下vmare+ubuntu22.04虚拟机,都可以进行搭建,旧版本的ubuntu,比如20.04/18.04等,问题应该也不大,可以先尝试。将文件copy到解压后的ubuntu-22.04-rootfs文件夹中的某个目录即可,示例如下,copy一个视频文件到test文件夹,mount后,可以看到该视频文件。这时候,mount.sh,umount.sh,tar_rootfs.sh和解压后的ubuntu-22.04-rootfs文件夹处于同级目录。_ubuntu安装qemu riscv
文章浏览阅读47次。互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢? 在写之前,我们首先了解一下为什么android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接..._微服务 心跳原理
文章浏览阅读1w次,点赞9次,收藏24次。芯片开发语言的简单区别介绍芯片设计前端的流程很长,和芯片前端相关的语言也很多,比如Verilog、VHDL、System Verilog、SystemC、Matlab、C/C++等等,但没有一个语言能够做到适合于整个前端流程;每种语言都有适合使用的领域,只有在整个前端流程的不同节点上选择最合适的语言工具,并加以整合,才能加速产品开发。注:本图引用自《SystemC: From the Groud Up》如上图所示,它显示了各种语言工具适合使用的场所,其中:Verilog、VHDL主要用于RTL建_芯片rtl是用什么语言写的
文章浏览阅读751次。题意:题目链接:https://www.51nod.com/onlineJudge/submitDetail.html#!judgeId=223971 每次生成一个[0,n)的随机数,如果这个随机数和给出的m个数字中的其中一个数字相等,那么就停止生成随机数,否则继续生成,求出所有生成的数的和的期望。思路:求期望的一种套路,可以列出一个关于期望E的方程,然后求解方程得出E的表达式。 对这道题来说,_51nod1765
文章浏览阅读860次,点赞6次,收藏11次。《系统架构设计师教程(第2版)》笔记,第6章-数据库设计基础知识-05-NoSQL数据库
文章浏览阅读173次。学习Oracle数据库入门到精通教程资料合集 原文地址:学习Oracle数据库入门到精通教程资料合集 作者:xuerong_wei 任何大型信息系统,都需要有数据库管理系统作为支撑。其中,Oracle以其卓越的性能获得了广泛的应用。本合集汇总了学习Oracle数据库从入门到精通的30份教程资料。资料名称下载地址超详细Oracle教程【PDF版电子..._oracle经典教程 pdf
文章浏览阅读904次。通过关注工作内容与挑战、工作环境与文化、管理与领导力、个人成长与发展以及薪酬与福利等关键要素,企业可以更好地了解员工的需求和期望,从而采取相应的措施来提高员工满意度。组织应该提供培训和发展计划,帮助员工提升专业技能和领导能力,同时为员工提供晋升和职业发展的机会,以满足员工的成长需求,提高满意度。管理者要成为员工的引领者和支持者,为员工提供积极的反馈和指导,帮助他们实现个人和团队的目标,从而提高员工满意度。一个积极向上、关注员工福祉的企业文化能够增强员工的归属感和认同感,提高员工的满意度。_员工满意度调查五个维度
文章浏览阅读2.7k次。有时会遇到QQ在异地登录的情况。一旦你在使用QQ的过程中遇到这样的情况,你就要小心了,因为你的密码很可能已经泄漏。 原因1:可能你没有密保,或者密保被别人知道了。 解决方法:申请第二代密码保护。 申请第二代密码保护方法: 登陆QQ——菜单——安全中心——申请密码保护——升级为第二代密码保护——设置后保存。 再打开安全中心——安全设置——网络信息安全——设置为高 原因2:你的电脑上有木马_qq在异地登录是怎么回事
文章浏览阅读977次。【代码】javascript 将json数据导出excel。_js json转excel