首页 > 其他分享 >springboot如何正确使用tomcat连接池

springboot如何正确使用tomcat连接池

时间:2022-11-04 07:45:06浏览次数:78  
标签:jdbc springboot tomcat spring datasource apache org 连接池

原文地址:http://blog.champbay.com/2019/03/29/springboot%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8tomcat%E8%BF%9E%E6%8E%A5%E6%B1%A0/

 

在springboot的application.properties中,我们常常这么设置:

spring.datasource.url=jdbc:mysql://192.168.0.1:3306/dbname
spring.datasource.username=aaa
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

假如只有上面这些关于连接池的设置,那么springboot将根据 org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder 中的下面次序去找有没有相应的jar:

private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] {
            "org.apache.tomcat.jdbc.pool.DataSource",
            "com.zaxxer.hikari.HikariDataSource",
            "org.apache.commons.dbcp.BasicDataSource", // deprecated
            "org.apache.commons.dbcp2.BasicDataSource" };

假如工程是内置tomcat容器的,那么默认就是 org.apache.tomcat.jdbc.pool.DataSource,同时tomcat连接池的那些最大最小参数都是默认值:
initialSize 10
maxActive 100
maxIdle 100
minIdle 10
可以看到这些默认值基本上也能满足大多数场景了。

假如觉得上面的这些值还不够好,那么需要在application.properties中这么设置才可以:
spring.datasource.tomcat.initialSize=10
spring.datasource.tomcat.maxActive=200
spring.datasource.tomcat.maxIdle=200
spring.datasource.tomcat.minIdle=10

这是因为在 org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.Tomcat 这个类中如下定义:

@Bean
        @ConfigurationProperties(prefix = "spring.datasource.tomcat")
        public org.apache.tomcat.jdbc.pool.DataSource dataSource(
                DataSourceProperties properties) {
            org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource(
                    properties, org.apache.tomcat.jdbc.pool.DataSource.class);
            DatabaseDriver databaseDriver = DatabaseDriver
                    .fromJdbcUrl(properties.determineUrl());
            String validationQuery = databaseDriver.getValidationQuery();
            if (validationQuery != null) {
                dataSource.setTestOnBorrow(true);
                dataSource.setValidationQuery(validationQuery);
            }
            return dataSource;
        }

可以看到 prefix = “spring.datasource.tomcat”,所以需要在配置中的前缀应该是 spring.datasource.tomcat,不这么设置,实际上是没有启用这些参数的。

最后,如何验证这些参数是否生效:在 org.apache.tomcat.jdbc.pool.DataSourceProxy 这个类的getConnection()方法中加个断点,然后运行后访问数据库时,查看这个 datasource 的这些参数。

标签:jdbc,springboot,tomcat,spring,datasource,apache,org,连接池
From: https://www.cnblogs.com/webjlwang/p/16856464.html

相关文章

  • springboot多模块配置nginx
    1.后端有8088、8089两个端口不同的模块2.在nginx里配置地址。监听端口:9001,转发端口:8088、8099#usernobody;worker_processes1;#error_loglogs/error.log;#er......
  • 基于Springboot+Mybatisplus+Vue的在线购物平台管理系统
    基于Springboot+Mybatisplus+Vue的在线购物平台管理系统......
  • 若依(前后端分离版vue)项目部署Tomcat--构建发布到外置Tomcat
    前言:懒得码字,摘抄自:王清江唷微信公众号需求:总有一些公司需要用外置Tomcat来跑项目,下面讲述如何用外置Tomcat跑后端。第一步:引入依赖(admin模块下面):    <dependen......
  • IDEA中jetty和tomcat的启动
    1.jetty的启动1.1端口在pom.xml中写定的情况        启动成功:  在浏览器中查看一下:成功  1.2端口不在pom.xml中写定,可以在(EditConfiguration......
  • springboot全局异常处理
    packagecom.casaba.provider.config;importcom.casaba.provider.domain.vo.AjaxResult;importlombok.extern.slf4j.Slf4j;importorg.springframework.web.HttpReq......
  • springboot web 自定义参数验证
    当需要前端必传某些参数的时候,可在代码里面校验,但是这样每一个方法都需要自己写代码验证。我们可以使用spring提供的@Validate1、单一参数验证接口是单一参数写在方......
  • Tomcat启动报内存不足的解决方法
    Tomcat启动后报错,报错日志如下:  解决方法如下:找到conf下的context.xml文件,增加下面内容<Resources cachingAllowed="true" cacheMaxSize="100000" />   ......
  • springboot整合项目-拦截器HandlerInterceptor
    拦截器在SpringMVC中拦截请求是通过处理器拦截器HandlerInterceptor来实现的,它拦截的目标是请求的地址。在SpringMVC中定义一个拦截器,需要实现HandlerInterceptor接口。......
  • springboot中使用职责链模式(转)
    转:https://www.51cto.com/article/720107.html一、什么是责任链模式?责任链模式(ChainofResponsibilityPattern),顾名思义,为请求者和接受者之间创建一条对象处理链路,避免......
  • SpringBoot配置swagger
    1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><......