- 浏览: 624331 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
<!-- 数据源配置, 使用Tomcat JDBC连接池 --> <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- Connection Pooling Info --> <property name="maxActive" value="${jdbc.pool.maxActive}"/> <property name="maxIdle" value="${jdbc.pool.maxIdle}"/> <property name="minIdle" value="0"/> <property name="maxWait" value="${jdbc.pool.maxWait}"/> <property name="defaultAutoCommit" value="true"/> <property name="timeBetweenEvictionRunsMillis" value="${jdbc.pool.timeBetweenEvictionRunsMillis}"/> <property name="minEvictableIdleTimeMillis" value="${jdbc.pool.minEvictableIdleTimeMillis}"/> <property name="removeAbandoned" value="${jdbc.pool.removeAbandoned}"/> <property name="removeAbandonedTimeout" value="${jdbc.pool.removeAbandonedTimeout}"/> <property name="logAbandoned" value="${jdbc.pool.logAbandoned}"/> <property name="testWhileIdle" value="${jdbc.pool.testWhileIdle}"/> <property name="numTestsPerEvictionRun" value="${jdbc.pool.numTestsPerEvictionRun}"/> <property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"/> </bean>
1. maxActive="100"
表示并发情况下最大可从连接池中获取的连接数。
2、maxIdle="30"
如果在并发时达到了maxActive=100,那么连接池就必须从数据库中获取100个连接来供应用程序使用,当应用程序关闭连接后,由于maxIdle=30,因此并不是所有的连接都会归还给数据库,将会有30个连接保持在连接池种中,状态为空闲。
maxIdle对应的连接,实际上是连接池保持的长连接,这也是连接池发挥优势的部分,理论上讲保持较多的长连接,在应用请求时可以更快的响应,但是过多的连接保持,反而会消耗数据库大量的资源,因此maxIdle也并不是越大越好
3、minIdle=”2”
最小默认情况下并不生效,它的含义是当连接池中的连接少有minIdle,系统监控线程将启动补充功能,一般情况下我们并不启动补充线程。
4、removeAbandoned="true"
超过时间限制是否回收
5、removeAbandonedTimeout="60"
超时时间;单位为秒
6、logAbandoned="true"
关闭abanded连接时输出错误日志
有时粗心的程序编写者在从连接池中获取连接使用后忘记了连接的关闭,这样连池的连接就会逐渐达到maxActive直至连接池无法提供服务。现代连接池一般提供一种“智能”的检查,但设置了removeAbandoned="true"时,当连接池连接数到达(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时便会启动连接回收,那种活动时间超过removeAbandonedTimeout="60"的连接将会被回收,同时如果logAbandoned="true"设置为true,程序在回收连接的同时会打印日志。removeAbandoned是连接池的高级功能,理论上这中配置不应该出现在实际的生产环境,因为有时应用程序执行长事务,可能这种情况下,会被连接池误回收,该种配置一般在程序测试阶段,为了定位连接泄漏的具体代码位置,被开启,生产环境中连接的关闭应该靠程序自己保证。
一般会是几种情况出现需要removeAbandoned:
1.代码未在finally释放connection , 不过我们都用sqlmapClientTemplate,底层都有链接释放的过程
2.遇到数据库死锁。以前遇到过后端存储过程做了锁表操作,导致前台集群中连接池全都被block住,后续的业务处理因为拿不到链接所有都处理失败了。
7.initialSize
连接池启动时创建的初始化连接数量(默认值为0)
8、maxWait
最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限,调整为60000ms,避免因线程池不够用,而导致请求被无限制挂起)
9、poolPreparedStatements
开启池的prepared(默认是false,未调整,经过测试,开启后的性能没有关闭的好。)
10、maxOpenPreparedStatements
开启池的prepared 后的同时最大连接数(默认无限制,同上,未配置)
11、minEvictableIdleTimeMillis
连接池中连接,在时间段内一直空闲,被逐出连接池的时间(默认为30分钟,可以适当做调整,需要和后端服务端的策略配置相关)
12、minEvictableIdleTimeMillis
连接池中连接可空闲的时间,毫秒
13、timeBetweenEvictionRunsMillis
设置的Evict线程的时间,单位ms,大于0才会开启evict检查线程
timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用
每timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止
14、testOnBorrow
顾明思义,就是在进行borrowObject进行处理时,对拿到的connection进行validateObject校验
15、testOnReturn
顾明思义,就是在进行returnObject对返回的connection进行validateObject校验,个人觉得对数据库连接池的管理意义不大
16、testWhileIdle
关注的重点,GenericObjectPool中针对pool管理,起了一个Evict的TimerTask定时线程进行控制(可通过设置参数timeBetweenEvictionRunsMillis>0),定时对线程池中的链接进行validateObject校验,对无效的链接进行关闭后,会调用ensureMinIdle,适当建立链接保证最小的minIdle连接数
17、validateQuery
代表检查的sql,用来检查连接是否有效的sql,要求是一个查询语句,如果validateQuery为null,则testOnBorrow、testOnReturn、testWhileIdle 都不会起作用
18、validateQueryTimeout
代表在执行检查时,通过statement设置,statement.setQueryTimeout(validationQueryTimeout)
19、numTestsPerEvictionRun
代表每次检查链接的数量,建议设置和maxActive一样大,这样每次可以有效检查所有的链接.
1."testWhileIdle">true 2."testOnBorrow">false 3."testOnReturn">false 4."validationQuery">select sysdate from dual 5."validationQueryTimeout">1 6."timeBetweenEvictionRunsMillis">30000 7."numTestsPerEvictionRun">20
minEvictableIdleTimeMillis,removeAbandonedTimeout这两个参数针对的连接对象不一样
minEvictableIdleTimeMillis针对连接池中的连接对象
removeAbandonedTimeout针对未被close的活动连接.
20、JdbcInterceptors
设置 tomcat jdbc 连接池的拦截器
内置的拦截器:
org.apache.tomcat.jdbc.pool.interceptor.ConnectionState
追踪自动提交、只读状态、catalog和事务隔离等级等状态
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer
追踪打开的statement,当连接被归还时关闭它们.
多个拦截器用;分割,例如:
javapoolProps.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
如果使用该技术为全局技术,需要将配置信息写在 tomcat 的conf文件夹的context.xml文件中(参数参照上面的注释):
<resource
name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testwhileidle="true"
testonborrow="true"
testonreturn="false"
validationquery="SELECT 1"
validationinterval="30000"
timebetweenevictionrunsmillis="30000"
maxactive="100"
minidle="10"
maxwait="10000"
initialsize="10"
removeabandonedtimeout="60"
removeabandoned="true"
logabandoned="true"
minevictableidletimemillis="30000"
jmxenabled="true"
jdbcinterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
username="root"
password="password"
driverclassname="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mysql" />
注:异步获取连接
1.必须将fairQueue设置为true
2.必须将数据源转换为org.apache.tomcat.jdbc.pool.DataSource
//连接池的获取
Connection conn = null;
DataSource ds = null;
ResultSet rs =null;
Statement stmt = null;
Context initCtx = new InitialContext();
ds =(DataSource)initCtx.lookup("java:comp/env/jdbc/ens");
参考:http://blog.itpub.net/7971010/viewspace-1114524
https://zhidao.baidu.com/question/153727978.html
参数说明:http://www.tuicool.com/articles/ZnEFZ33
http://www.cnblogs.com/asoks/p/5321534.html
发表评论
-
BigDecimal/Long 前后端交互失去精度解决方法
2024-01-22 10:31 376BigDecimal/Long 前后端交互失去精度解决方法 ... -
在Java 8中可以通过下面的方式获取Map对象的第一个元素
2023-12-18 13:48 304Java 8中如何获取Map对象的第一个元素 -
用EXCEL批量生成INSERT语句
2023-03-18 11:19 670用EXCEL批量生成INSERT语句 -
使用Java访问FTP文件时再次调用方法client.retrieveFileStream(ftpFile)会返回null的问题
2023-01-07 21:50 697使用Java访问FTP文件时再次调用方法client.retr ... -
java获取本月最后一天
2022-12-28 08:29 2327java获取本月第一天或者最后一天方法 @Test ... -
www
2022-11-12 09:03 0public void saveTransScheduleBi ... -
Notepad++删除代码中的注释,可删除//单行注释和/**/多行注释
2022-10-20 14:17 720Notepad++删除代码中的注释,可删除//单行注释和/** ... -
接口限流算法有哪些
2022-05-05 23:27 225接口限流的几种算法 接口限流算法有哪些? nginx限流方案 ... -
CompletableFuture学习记录
2022-04-25 18:00 219CompletableFuture学习记录 -
java单例模式几种实现方式
2022-04-18 11:48 231java单例模式几种实现方式 -
临时的几个网站
2022-03-31 13:33 243https://www.cnblogs.com/chengxu ... -
Java Stream - 如何filter带谓词
2022-03-23 23:53 227Java Stream Java Lambda语法 J ... -
URLConnection的连接、超时、关闭用法总结
2022-03-08 17:23 549URLConnection的连接、超时、关闭用法总结 jav ... -
关于java中的this::
2022-02-26 23:07 198关于java中的this:: -
StringRedisTemplate和RedisTemplate的区别和选择
2022-02-10 23:05 240StringRedisTemplate和RedisTempla ... -
ForkJoinPool初略分析
2022-02-10 11:44 263ForkJoinPool初略分析 多线程 ForkJoin ... -
service中@NotNull的使用
2022-01-23 13:48 1477@Validated和@NotNull加到什么上面,接口还是 ... -
Java8 Collectors.toMap的两个大坑
2022-01-21 15:54 297Java8 Collectors.toMap的两个大坑 -
踩坑之SimpleAsyncTaskExecutor
2022-01-13 20:50 800踩坑之SimpleAsyncTaskExecutor Sp ... -
都在建议你不要直接使用 @Async 注解
2022-01-10 11:54 748引用如果不自定义异步方法的线程池默认使用SimpleAsync ...
相关推荐
tomcat-jdbc资源包,tomcat包,工具挺好用的。强烈推荐
The Tomcat JDBC Connection Pool tomcat-jdbc.jar
这个库是Tomcat的JDBC连接池实现,全称为Apache Tomcat JDBC Connection Pool。它提供了许多高级特性,如连接验证、空闲检测、公平锁、生命周期回调等。通过使用这个连接池,开发者可以有效地管理数据库连接,避免...
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource spring.datasource.tomcat.initial-size=5 spring.datasource.tomcat.max-active=20 spring.datasource.tomcat.min-idle=5 spring.datasource....
The JDBC Connection Pool org.apache.tomcat.jdbc.pool is a replacement or an alternative to the commons-dbcp connection pool.
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.5.8/tomcat-jdbc-8.5.8.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.0.28/tomcat-jdbc-8.0.28.jar
Apache Tomcat 的 JDBC-Pool 是一个内置的连接池实现,用于高效管理数据库连接。它提供了丰富的配置选项,以满足各种性能和稳定性需求。下面是对标题和描述中涉及的一些关键参数的详细解释: 1. **factory**:这个...
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/7.0.25/tomcat-jdbc-7.0.25.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.5.23/tomcat-jdbc-8.5.23.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.0.30/tomcat-jdbc-8.0.30.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/9.0.46/tomcat-jdbc-9.0.46.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.5.15/tomcat-jdbc-8.5.15.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.5.6/tomcat-jdbc-8.5.6.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/7.0.94/tomcat-jdbc-7.0.94.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.5.16/tomcat-jdbc-8.5.16.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.5.11/tomcat-jdbc-8.5.11.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/8.5.34/tomcat-jdbc-8.5.34.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/9.0.16/tomcat-jdbc-9.0.16.jar
Tomcat JDBC池软件包 org.apache.tomcat/tomcat-jdbc/9.0.21/tomcat-jdbc-9.0.21.jar