暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Springboot相关连接池整理

济南小老虎 2022-11-22
43

第一部分 Http连接池

server:
#tomcat配置
port: 5200
tomcat:
# 当所有线程都在使用时,建立连接的请求的等待队列长度,默认100
accept-count: 1000
# 线程池维持最小线程数,默认10
min-spare-threads: 4
# 允许最大连接数,默认10000,当达到临界值时,系统可能会基于accept-count继续接受连接
max-connections: 10000
# 最大线程数,默认200
max-threads: 1000
# 设置最大的Post的数值, tomcat 7.x 以后 -1 表示不限制大小.
max-http-post-size: -1
basedir: /gscloud/server/log
# 举例.


第二部分 数据库连接池

spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
# 连接池的类型. 现在最好的就是Hikari连接池.
url: ENC(2JkxXimRq2sAfOxxxxxxpfwWu3z0oK7AaaV2716TwaHo)
# url 一般是数据库连接, 为了安全可以使用如图的加密方式
driver-class-name: oracle.jdbc.driver.OracleDriver
# 驱动的类名, 可以确定数据库类型
username: ENC(HSwZfKrG+pStqnAKo1VzCh3eW7xxxxxxxxxx)
password: ENC(xSni4UUxCcAMWE4uk98V63LqwS5xxxxxxxxxxx)
3 用户密码信息.
hikari:
pool-name: hikari-cp
connection-test-query: SELECT 1 From DUAL
maximum-pool-size: 100
minimum-idle: 1
# 这里有连接池的大小和设置.
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
jdbc:
batch_size: 10
temp:
use_jdbc_metadata_defaults: false
dialect: org.hibernate.dialect.CAFOracleDialect
# 这里有方言, 也是数据库的类型.


第二部分 数据库连接池

公司里面的产品还有第二部分的设置
caf-security:
authn:
providers:
username-password-jdbc:
enabled: true
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: ENC(2JkxXimRq2sAfOeay3ilAa+NpYOgu6hY9bTjpNqtdm0Nx7I16/aFQjPNlKh1iEqvelVxWUFlpfwWu3z0oK7AaaV2716TwaHo)
driver-class-name: oracle.jdbc.driver.OracleDriver
username: ENC(HSwZfKrG+pStqnAKo1VzCh3eW73oRGsbeyyX2Cmdfc2FtrRZ5E5xmw==)
password: ENC(xSni4UUxCcAMWE4uk98V63LqwS5UbtTb4Paza4Ar+GOANXdQlxERaQ==)
secret-column: password
secret-key-column: userid
secret-key-algorithm: DES
# 这个里面也有一个 数据库连接的信息 但是具体用途不是很清楚.


第三部分 Redis连接池

Redis连接池准备放两个. 一个是单点的,一个是集群的
先说一下复杂的集群的:

spring:
data:
redis:
repositories:
enabled: true
# 上面这一段我不太清楚具体用途
session:
store-type: redis
timeout: 1800
#这一段应该是进行session存储的. 如果是应用集群部署,必须使用单一的session存储.
redis:
cluster:
max-redirects: 3
nodes: 10.110.139.190:8001,10.110.139.190:8002,10.110.139.190:8003,10.110.139.190:8004,10.110.139.190:8005,10.110.139.190:8006
# 这是是集群的配置地址
password: Testxxxxxxxx
# Redis必须要设置密码
jedis:
pool:
min-idle: 1
max-active: 100
max-wait: -1
max-idle: 50
# 这个配置节是jedis的. 应该可以设置jedis的连接池配置.

# 产品比较复杂还有一个 缓存管理的部分
caching-configuration:
enableRedis: true
redisManagers:
- name: default
mode: cluster
nodes: 10.110.139.190:8001,10.110.139.190:8002,10.110.139.190:8003,10.110.139.190:8004,10.110.139.190:8005,10.110.139.190:8006
password: Testxxxxxxxx
idleConnectionTimeout: 100000
pingTimeout: 100000
connectTimeout: 100000
timeout: 30000
retryAttempts: 30
retryInterval: 60000
reconnectionTimeout: 60000
failedAttempts: 3
masterConnectionPoolSize: 512
readMode: SLAVE
scanInterval: 10000
threads: 400
nettyThreads: 400
# 后面这些不知道有没有效果呢.
# 分析之前的文档 发现还有一个Redis单独的配置节. 官方文档里面说 还可以添加一下redis的配置
# 但是我不是非常清楚能否生效. 需要再测试一下.
redis:
enabled: true
# 这个true 是很重要的 是一个核心参数. 应用集群模式必须打开 高并发的场景但服务器也建议打开.


第三部分 redis连接池

单点的比较简单主要如下:
# 启用配置节0
redis:
enabled: true

# 缓存配置节

caching-configuration:
enableRedis: true
redisManagers:
- name: default
mode: standalone
host: localhost
port: 6379

# Session配置节
spring:
data:
redis:
repositories:
enabled: true
main:
lazy-initialization: false
application:
edition: Standard-File
session:
store-type: redis
timeout: 1800
redis:
database: 0
host: localhost
port: 6379

# 暂未开放的一个配置节(公司自有的 请不要参考)
caf-lock:
enableAlone: false
redis:
database: 0
host: 127.0.0.1
port: 6379


第四部分 连接池总结

第一部分 http
max的connection 可以理解为能够简历的最多http连接数
他不仅受到这个参数的限制, 还受到系统的ulimit参数以及系统配置的限制.
threads 会决定多少个人来干活.
accept 我理解可以是等待队列.

第二部分 数据库
很多资料都会说, 数据库连接是非常宝贵和昂贵的资源.
现在企业应用都是通过连接池进行管理.
max 数值就是产品 支持的建立最多的数据库连接.
这个数据一般是跟业务类型关联的.
如果是短促型的业务, 比如每次处理只需要10ms,那么理论上 10个数据库连接的最大值
就可以支撑 1000个并发.
但是如果是长查询业务, 一个数据库的查询处理可能会话费几秒钟,那么可能至少要设置到
100左右才能支撑较多用户的并发
连接池最终是要占用数据库的资源(Oracle的PGA以及TCP连接池)
所以也不能没一个应用设置的太大, 上下文切换连接池也是需要耗费资源和时间的.
另外用完数据库一定要提交或者是rollback事务. 并且清理自己的session信息.
避免出现连接池串掉的现象.

第三部分 redis
Redis其实理论上都是短促性的连接池不应该设置的过大.
但是实际上可能会比较奇怪, 这一块没有实际的经验. 可能需要大拿来解释.


文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论