druid+jdbc+mysql 多次get请求报错connection holder is null

多触发几次请求查询,报了connection holder is null的错误,感觉跟没用 druid的时候的connection is closed 一样的,不知道有大神帮忙分析下不

你这样提问,没人能帮到你。凭借你这几句话,没人能知道是怎么回事。
你怎么用的?怎么配置的?异常的堆栈式什么?你要复制出来。

这是pom配置文件

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

这是 yml 数据源配置:

    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 下面为连接池的补充设置,应用到上面所有数据源中
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 10
      max-active: 50
      # 配置获取连接等待超时的时间
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      pool-prepared-statements: true
      #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      max-pool-prepared-statement-per-connection-size: 20
      #      filters: stat,wall
      use-global-data-source-stat: true

我没有在代码里面写任何东西,是不是new 新的数据源啊,

错误就这个,SQL是没问题的

2020-06-11 14:51:11.283 ERROR 21505 --- [http-nio-8877-exec-1] c.a.codeService.service.TagServicelmpl   : GetTagList:StatementCallback; uncategorized SQLException for SQL [select count(name) as total,name from js_tag group by name order by total desc limit 0,12;]; SQL state [null]; error code [0]; connection holder is null; nested exception is java.sql.SQLException: connection holder is null|执行的SQL:select count(name) as total,name from js_tag group by name order by total desc limit 0,12;

你jdbcTemplate哪里来的?怎么初始化的?

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

    @Autowired
    private JdbcTemplate jdbcTemplate;

      String sql = "select count(name) as total,name from js_tag group by name order by total desc limit 0,12;";

   try {
            list = jdbcTemplate.query(sql, rowMapper.GetTagMapper());
        } catch (Exception e) {
            LOG.error("GetTagList:" + e.getMessage() + "|执行的SQL:" + sql);
        }

奇怪的是我在我本地没出过个问题,用windows的服务器也没出过这种问题

你JdbcTemplate怎么初始化的?是不是了用了Druid数据源?
例如:

new JdbcTemplate(this.dataSource());

没有这样用
import org.springframework.jdbc.core.JdbcTemplate;

@Autowired
private JdbcTemplate jdbcTemplate;

直接注入
jdbcTemplate.query(sql, rowMapper.GetTagMapper());
然后开始查询

没有new druid datasource,直接用的 注入JdbcTemplate,我调试过,好像确实是 已经切换了 druid的数据源的

你先看日志,确定是不是从你配置的数据源里面获取的链接。如果不是的话,你要自己配置 JdbcTemplate

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

@Configuration
public class JdbcTemplcateConfiguration {
	
	@Bean
	public JdbcTemplate jdbcTemplate (@Autowired DataSource dataSource) {
		return new JdbcTemplate(dataSource);
	}
}

如果确定是从数据源获取的链接,那么你可以尝试在Druid的配置中添加下面两个配置

removeAbandoned: true
removeAbandonedTimeout: 1800

这配置的意思是

从数据源获取链接后,在 removeAbandonedTimeout 这么多秒内必须要调用 close() 方法。否则就会被主动关闭。

好的,我先试试