SpringBoot 整合线程池及各参数详解

SpringBoot 整合线程池及各参数详解,第1张

ThreadPoolConfig

ThreadController

AsyncService

AsyncServiceImpl

applicationyaml

运行结果

参数默认值及含义

对照源码解析,可以得出以下结论:

1如果线程池中线程数量 < 核心线程数,新建一个线程执行任务;

2如果线程池中线程数量 >= 核心线程数,则将任务放入任务队列

3如果线程池中线程数量 >= 核心线程数 且 < maxPoolSize,且任务队列满了,则创建新的线程;

4如果线程池中线程数量 > 核心线程数,当线程空闲时间超过了keepalive时,则会销毁线程;由此可见线程池的队列如果是无界队列,那么设置线程池最大数量是无效的;

5如果线程池中的任务队列满了,而且线程数达到了maxPoolSize,并且没有空闲的线程可以执行新的任务,这时候再提交任务就会执行拒绝策略

拒绝策略详解

拒绝策略RejectedExecutionHandler分为以下5种

结论

这几种策略没有好坏之分,只是适用不同场景,具体哪种合适根据具体场景和业务需要选择,如果需要特殊处理就自己定义好了。

springboot支持多种配置文件读取方式,了解这些方式有助于查询和定位问题以及选择合适的方式进行开发。

springboot默认的配置文件是applicationproperties,其存放的位置可以有以下几种,从上到下按照优先级排序如下,注意,当存在重复的配置文件时,高优先级的的将会覆盖低优先级的。

若不想使用默认的applicationproperties配置文件,也可以自定义配置文件名,有两种方式:

这里可以一次性将所有的配置全部加载进入配置文件,然后在使用到的类中注入Configuration 实例,使用get方法获取属性。

在实际工作中,需要根据开发、测试和生产配置不同环境的配置文件。可以在合适的路径下(见第一节配置文件位置)存放 application-devproperties,application-testproperties,application-prodproperties 三个配置文件分别代表三个不同的环境,在springboot应用启动时传入指定的参数,例如 --springprofilesactive=prod 指定使用 application-prodproperties 文件,另外也可以采用将 springprofilesactive=prod 配置到系统环境变量中,使用 --springconfiglocation=/config/application-{springprofilesactive}properties ,springboot还支持加载多个不同的配置文件,例如

--springprofilesactive=prod,test

我也遇到过这个问题,我的现象是参数被截断,只剩下字符串最后大约十分之一的长度。

我也设置了max-request-size,没起作用,或许是springboot的bug。

后来换了另一种传输方式

后台controller用@RequestBody接收参数,前台ajax用contentType: "application/json; charset=utf-8"发送参数。

只有form形式的ajax参数才会被tomcat解析并截断,换用json形式就绕过了

1通过Java获取本机ip,可以使用InetAddress类的getLocalHost()方法。

2通过Spring Boot配置文件(比如applicationyml)来设置数据库连接,可以使用Spring Boot placeholder实现,如:${localip}:3306

3在SpringBoot应用程序启动时,程序可以在启动参数里指定localip属性,获取本机ip,并与端口号组合成数据库链接地址。

描述

接口的参数验证(比如:字段长度、字段需要符合某个格式)

1 PathVariable校验

直接将参数验证的条件加到参数后面, {group:\d{6}} 表示参数group必须是6位的数据

示例

访问一个错误路径,会得到 404 响应

结果

2 RequestParam校验

尝试使用非法值访问

结果

对于直接JSON消息体传参,同样可以定义校验规则

尝试使用非法值访问

结果

参考链接

springboot 参数校验详解

SpringBoot里参数校验/参数验证

#map 第一种方式

datapersonname=zhangsan

datapersonsex=man

datapersonage=11

datapersonurl=xxxxxxxx

#map 第二种方式

dataperson[name]=zhangsan

dataperson[sex]=man

dataperson[age]=11

dataperson[url]=xxxxxxxx

#list 第一种方式

datalist[0]=apple0

datalist[1]=apple1

datalist[2]=apple2

#list 第二种方式

datalist=apple0,apple1,apple2

以上就是关于SpringBoot 整合线程池及各参数详解全部的内容,包括:SpringBoot 整合线程池及各参数详解、springboot配置文件读取、springboot框架中,获取前台的参数为null(前台数据量比较大,一个list串)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9633658.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存