如何查找在SpringBoot应用程序中创建的JDBC连接池线程?

时间:2016-09-21 06:40:41

标签: tomcat jdbc spring-boot connection-pooling visualvm

我的Spring Boot 1.4应用程序中的以下属性使用JDBC与本地MySQL通信 -

  • spring.datasource.test-而空闲=真
  • spring.datasource.test上借入=真
  • spring.datasource.validation-query = SELECT 1
  • spring.datasource.initial尺寸= 50
  • spring.datasource.max活性= 100
  • spring.datasource.max空闲= 50
  • spring.datasource.min空闲= 50
  • spring.datasource.initial尺寸= 50
  • spring.datasource.tomcat.max活性= 100
  • spring.datasource.tomcat.max空闲= 50
  • spring.datasource.tomcat.min空闲= 50
  • spring.datasource.tomcat.initial尺寸= 50

我知道最后四行是重复的,但如果任何组合有效,我会保留这些。 Spring Boot文档说所有数据源tomcat属性都应该在spring.datasource.tomcat。*下。另一方面,前三行正在使用SpringBoot 1.3和1.4。因此,期望连接池参数也将起作用。

启动应用程序后,我检查了VisualVM中的所有线程。计数是~20,远远低于我设定的50。在触发后发出1000个使用Spring Data存储库与MySQL通信的REST调用,我看到线程计数增加到50以上。但是,一旦REST调用结束并且在一段时间之后,线程计数下降到~30。我看到~10个工作线程仍处于空闲状态。

所以,我的查询是,你将如何检测Spring Boot应用程序线程池中的JDBC连接池线程?

另外,属性配置有什么问题?为什么没有创建预期线程数的JDBC连接池?

1 个答案:

答案 0 :(得分:1)

连接池不会创建线程(或者:它可能会创建1或2用于管理,但就是这样)。连接池创建(并跟踪)与数据库的JDBC连接,以便在应用程序请求时分发。池本身不需要每个连接都有一个线程。

您看到的大多数线程都来自Java本身(例如垃圾收集等)以及处理HTTP连接所需的线程(可能会在负载下增加并在空闲时减少),以及应用程序代码所产生的任何其他线程