SpringBoot-配置文件properties/yml分析+tomcat最大连接数及最大并发数

news2024/11/25 22:33:32

SpringBoot配置文件

yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如在 Spring Cloud Zuul 中的配置),此时一般采用 yaml。

Properties

①、位置问题
默认 resources 目录下就有一个 application.properties 文件
resources目录下的config目录下

当前项目根目录下
当前项目根目录下的config目录下

四个配置优先级依次降低,默认会从这四个位置按顺序去查找相关属性并加载。
在这里插入图片描述

也可以采用手动加载其他目录下的配置文件
在 resources 目录下创建一个 javaboy 目录,目录中存放一个 application.properties 文件。启动 Spring Boot 项目时,这个配置文件是不会被自动加载的
开发工具中配置了启动位置,通过 spring.config.location 属性来手动的指定配置文件位置,指定完成后,系统就会自动去指定目录下查找 application.properties 文件
在这里插入图片描述
如果项目已经打包成 jar ,在启动命令中加入位置参数即可:

java -jar properties-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/javaboy/

②、文件名问题
项目默认是去加载名为 application 的配置文件,若配置文件不叫 application,需要明确指定配置文件的文件名。
方式和指定路径一致,只不过此时的 key 是 spring.config.name
在 resources 目录下创建一个 app.properties 文件,然后在 IDEA 中指定配置文件的文件名:
在这里插入图片描述
允许自定义文件名的配置文件不放在四个默认位置,而是放在自定义目录下,此时就需要明确指定 spring.config.location
配置文件位置和文件名称可以同时自定义

③、配置文件中属性注入

public class Book {
    private Long id;
    private String name;
    private String author;
    //省略 getter/setter
}

在 application.properties 文件中定义属性

book.name=三国演义
book.author=罗贯中
book.id=1

直接通过 @Value 注解将这些属性注入到 Book 对象中:

@Component //Book 对象本身也要交给 Spring 容器去管理,如果 Book 没有交给 Spring 容器,那么 Book 中的属性也无法从 Spring 容器中获取到值
public class Book {
    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //省略getter/setter
}

配置完成后,在 Controller 或者单元测试中注入 Book 对象,启动项目,就可以看到属性已经注入到对象中了

实际应用,application.properties 文件中主要存放系统配置,这种自定义配置不建议放在该文件中,可以自定义 properties 文件来存在自定义配置。
在 resources 目录下,自定义 book.properties 文件

book.name=三国演义
book.author=罗贯中
book.id=1

项目启动并不会自动的加载该配置文件,如果是在 XML 配置中,可以通过如下方式引用该 properties 文件:

<context:property-placeholder location="classpath:book.properties"/>

如果是在 Java 配置中,可以通过 @PropertySource 来引入配置:

@Component
@PropertySource("classpath:book.properties")
public class Book {
    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //getter/setter
}

④、类型安全的属性注入

引入 @ConfigurationProperties(prefix = “book”) 注解,并且配置了属性的前缀,此时会自动将 Spring 容器中对应的数据注入到对象对应的属性中,就不用通过 @Value 注解挨个注入了,减少工作量并且避免出错

@Component
@PropertySource("classpath:book.properties")
@ConfigurationProperties(prefix = "book")
public class Book {
    private Long id;
    private String name;
    private String author;
    //省略getter/setter
}

yml

相较于properties,yaml 配置目前不支持 @PropertySource 注解

①、位置

项目根目录下的 config 目录中
项目根目录下

classpath 下的 config 目录中
classpath 目录下

四个位置中的 application.yaml 文件的优先级按照上面列出的顺序依次降低

②、自定义名称,需要指定(这样配置之后,在项目启动时,就会按照上面所说的四个位置按顺序去查找一个名为 app.yaml 的文件)
在这里插入图片描述
如果项目已经打成 jar 包了,则在项目启动时加入如下参数:

java -jar myproject.jar --spring.config.name=app

这四个位置也不是一成不变的,也可以自己定义,有两种方式,一个是使用 spring.config.location 属性,另一个则是使用 spring.config.additional-location 这个属性,在第一个属性中,表示自己重新定义配置文件的位置,项目启动时就按照定义的位置去查找配置文件,这种定义方式会覆盖掉默认的四个位置,也可以使用第二种方式,第二种方式则表示在四个位置的基础上,再添加几个位置,新添加的位置的优先级大于原本的位置。
在这里插入图片描述

③、数组注入

my:
  servers:
	- dev.example.com
	- another.example.com

绑定一个Bean的数组中

@ConfigurationProperties(prefix="my")
@Component
public class Config {

	private List<String> servers = new ArrayList<String>();

	public List<String> getServers() {
		return this.servers;
	}
}

项目启动后,配置中的数组会自动存储到 servers 集合中。当然,yaml 不仅可以存储这种简单数据,也可以在集合中存储对象。例如下面这种:

redis:
  redisConfigs:
    - host: 192.168.66.128
      port: 6379
    - host: 192.168.66.129
      port: 6380
@Component
@ConfigurationProperties(prefix = "redis")
public class RedisCluster {
    private List<SingleRedisConfig> redisConfigs;
	//省略getter/setter
}

Tomcat

每个Spring Boot版本和内置容器不同,结果也不同,这里以Spring Boot 2.7.10版本 + 内置Tomcat容器举例。
在SpringBoot2.7.10版本中内置Tomcat版本是9.0.73,SpringBoot内置Tomcat的默认设置如下:

  • Tomcat的连接等待队列长度,默认是100
  • Tomcat的最大连接数,默认是8192
  • Tomcat的最小工作线程数,默认是10
  • Tomcat的最大线程数,默认是200
  • Tomcat的连接超时时间,默认是20s
    在这里插入图片描述
    相关配置如下:
server:
  tomcat:
    # 当所有可能的请求处理线程都在使用中时,传入连接请求的最大队列长度
    accept-count: 100
    # 服务器在任何给定时间接受和处理的最大连接数。一旦达到限制,操作系统仍然可以接受基于“acceptCount”属性的连接。
    max-connections: 8192
    threads:
      # 工作线程的最小数量,初始化时创建的线程数
      min-spare: 10
      # 工作线程的最大数量 io密集型建议10倍的cpu数,cpu密集型建议cpu数+1,绝大部分应用都是io密集型
      max: 200
    # 连接器在接受连接后等待显示请求 URI 行的时间。
    connection-timeout: 20000
    # 在关闭连接之前等待另一个 HTTP 请求的时间。如果未设置,则使用 connectionTimeout。设置为 -1 时不会超时。
    keep-alive-timeout: 20000
    # 在连接关闭之前可以进行流水线处理的最大HTTP请求数量。当设置为0或1时,禁用keep-alive和流水线处理。当设置为-1时,允许无限数量的流水线处理或keep-alive请求。 
    max-keep-alive-requests: 100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1219584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测标注工具AutoDistill

引言 在快速发展的机器学习领域&#xff0c;有一个方面一直保持不变&#xff1a;繁琐和耗时的数据标注任务。无论是用于图像分类、目标检测还是语义分割&#xff0c;长期以来人工标记的数据集一直是监督学习的基础。 然而&#xff0c;由于一个创新性的工具 AutoDistill&#x…

鉴源实验室 | DoIP协议网络安全攻击

作者 | 付东杰 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 背 景 随着科技的迅猛发展&#xff0c;汽车行业正经历着前所未有的数字化变革。现代汽车中使用70多个电子控制单元&#x…

Word文档处理:用Python轻松提取Word文档图文数据

将内容从Word文档中提取出来可以方便我们对其进行其他操作&#xff0c;如储将内容存在数据库中、将内容导入到其他程序中、用于AI训练以及制作其他文档等。使用Spire.Doc for Python提供了一个简单的方法直接提取Word文档中的文本内容&#xff0c;包括文本和图片&#xff0c;而…

使用requests库进行网络爬虫:IP请求错误的解决方法

目录 引言 一、了解requests库 二、遇到的问题 三、解决方法 1、随机化IP地址 2、减少请求频率 3、使用User Agent模拟浏览器行为 4、使用Cookies 四、注意事项 五、使用代理池 六、总结 引言 在利用Python的requests库进行网络爬虫操作时&#xff0c;我们有时会遇…

js 将多张图片合并成一张图片

其实就是将两张图片地址根据canvas组合在一起&#xff0c;我放到项目中因为会存在跨域问题&#xff0c;所以将图片转化成base64&#xff0c;后面还会带随机值&#xff0c;这样可避免图片跨域错误&#xff0c;正常情况下可以直接将图片放到canvas里面。 灵感来源&#xff1a;js…

2022年蓝桥杯STEMA 计算思维组模拟练习试卷8(U10 级,约小学 3-4 年级)

1、北京冬奥会经历 17&#xff08; &#xff09;&#xff0c;中国体育代表团收获的金牌数和奖牌数均创历史新高 A、年 B、月 C、天 D、小时 答案&#xff1a;C 2、下面图形的周长是多少 m A、8 B、10 C、15 D、20 答案&#xff1a;D 3、小马虎在练习竖式计算&#xff0…

如何提升软件测试效率?本文为你揭示秘密

在软件开发中&#xff0c;测试是至关重要的一个环节。它能帮助我们发现并修复问题&#xff0c;从而确保我们提供的软件具有高质量。然而&#xff0c;测试过程往往费时费力。那么&#xff0c;有没有方法可以提升我们的软件测试效率呢&#xff1f;答案是肯定的。下面&#xff0c;…

前端uniapp列表下拉到底部加载下一页列表【下拉加载页面/带源码/实战】

目录 一. 图片1.2. 二.list.vue三.uni-load-more.vue最后 一. 图片 1. 2. 二.list.vue <template><view><!--列表--><scroll-view scroll-y"true" class"scroll-Y" :style"height: scrollviewHigh px;" lower-threshol…

怎么用领英开发客户?分享领英开发客户的方法和技巧

对于绝大多数外贸业务员来说&#xff0c;领英(LinkedIn)是一个非常重要且有效的客户开发渠道。在领英这个平台&#xff0c;如果你掌握了开发客户的方法&#xff0c;那么营销推广产品或服务的终极目标就有很大可能的实现&#xff01;其实真正上手并不难&#xff0c;因为平台内有…

07.智慧商城——商品详情页、加入购物车、拦截器封装token

01. 商品详情 - 静态布局 静态结构 和 样式 <template><div class"prodetail"><van-nav-bar fixed title"商品详情页" left-arrow click-left"$router.go(-1)" /><van-swipe :autoplay"3000" change"onCha…

Python在函数中使用列表作为默认参数

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 在学习中遇到的Python的一个坑&#xff0c;那就是使用列表作为默认参数。 我们知道&#xff0c;在Python中&#xff0c;列表&#xff08;list&#xff09;是可变…

融云五大场景化能力,全面赋能金融行业数智化转型

在高知识密度与大数据处理双向奔赴&#xff0c;「金融大模型」如何推动行业进化&#xff1f;一文中&#xff0c;我们分享了大模型在金融行业的赋能实践和未来场景。关注【融云 RongCloud】&#xff0c;了解协同办公平台更多干货。 其中&#xff0c;融云作为通信服务商&#xf…

开放式耳机和骨传导耳机有什么区别?哪款值得入手?

开放式耳机和骨传导耳机最大的区别就是佩戴方式不同和传声方式不同&#xff0c;相比之下骨传导耳机更值得入手一些。但其实骨传导耳机也是开放式耳机&#xff0c;下面先了解下开放式耳机都有哪几种。 一、开放式耳机分哪几种&#xff1f; 开放式耳机分为气传导和骨传导。这两种…

这样跟国外客户说可能更好

所说最近的一些沟通感受&#xff0c;不知道大家有没有这样的感觉&#xff0c;每当客户说让价格便宜点的时候&#xff0c;我们习惯性的去问定量&#xff0c;如果客户的定量的确也增加不上来&#xff0c;我们可能会直接回复“sorry, we can not ..." 其实本身这句话并没有毛…

PVP2 ProVideoPlayer 2.1.6(PVP2多屏幕演示投放软件)

PVP2 ProVideoPlayer2是一款视频播放和管理软件&#xff0c;旨在帮助用户实现多屏幕视频播放和内容管理。它被广泛应用于演出、活动、会议等场合&#xff0c;可以同时播放多个视频、图像和音频文件&#xff0c;并提供强大的控制和管理功能。 PVP2 ProVideoPlayer2具有直观的用…

使用express连接MySQL数据库编写基础的增、删、改、查、分页等接口

使用express连接MySQL数据库编写基础的增、删、改、查、分页接口 安装express-generator生成器 cnpm install -g express-generator通过生成器创建项目 express peifang-server切换至serverAPI目录 cd peifang-server下载所需依赖 cnpm install 运行项目 npm start访问项…

uniapp 手动调用form表单submit事件

背景&#xff1a; UI把提交的按钮弄成了图片&#xff0c;之前的button不能用了。 <button form-type"submit">搜索</button> 实现&#xff1a; html&#xff1a; 通过 this.$refs.fd 获取到form的vue对象。手动调用里面的_onSubmit()方法。 methods:…

掌握苏宁API,一键获取商品详情,解锁无尽商业可能

苏宁的API接口可以用于获取商品详情。以下是一个示例的API接口&#xff0c;通过商品ID获取商品详情&#xff1a; https://open.suning.com/api/content/product/getById?productId商品ID&appKey你的应用密钥&sign你的签名&formatjson 在上面的接口中&#xff0c…

无人智能货柜:引领便捷购物新体验

无人智能货柜&#xff1a;引领便捷购物新体验 无人智能货柜利用人工智能技术&#xff0c;将传统货架与电子商务相结合&#xff0c;形成智能销售终端。其采用先拿货后付款的购物模式&#xff0c;用户只需扫码、拿货、关门三个简洁流畅的步骤&#xff0c;极大地提升了消费者的购物…

文心一言 VS 讯飞星火 VS chatgpt (137)-- 算法导论11.3 3题

三、用go语言&#xff0c;考虑除法散列法的另一种版本&#xff0c;其中 h(k) k mod m&#xff0c;m 2 p − 1 2^p-1 2p−1&#xff0c;k为按基数 2 p 2^p 2p 表示的字符串。试证明:如果串可由串 y 通过其自身的字符置换排列导出&#xff0c;则x和y具有相同的散列值。给出一个…