首页 > 其他分享 >Connection is not available 解决方案

Connection is not available 解决方案

时间:2023-06-02 14:24:02浏览次数:33  
标签:available return 解决方案 Connection jdbcTemplate sql new public JdbcTemplate

最近程序中发现时不时”死机,无响应“的问题,必须重启服务器才能解决,用的是官方提供的 jdbcTemplate 工具,经查看日志得知

 数据源连接池里面的资源全部不可用了, 是什么原因呢?

 

经查悉,原来是有人在写sql的时候,进行了全表查询并且数据较大,导致响应未果,多次请求以后就消耗掉了所有的连接池里面的资源  都在卡住状态。导致无链接可用才引发了这个结果

 

方法一 在jdbc中用自带的 queryTimeOut 参数设置 响应时间,超过设置的时间无响应,就会自动抛异常释放资源

方法二  重新赋值jdbcTemplate 的 赋值 方法,  增加读取时间设置,超过这个时间 数据还没读取完毕,就手动抛出异常释放资源

 

用重新的JdbcTemplateWapper 替代 JdbcTemplate

代码

public class JdbcTemplateWapper extends JdbcTemplate {

    /**
     * 查询超时时间
     */
    public static int queryTimeout = 30;
    //数据读取超时时间 ms
    public static long readTimeOut = 10000;//ms
    
    private final JdbcTemplate jdbcTemplate;
    
    
    public JdbcTemplateWapper(JdbcTemplate jdbcTemplate){
        this.jdbcTemplate = jdbcTemplate;
        this.jdbcTemplate.setQueryTimeout(queryTimeout);
    }


    @Override
    public <T> List<T> queryForList(String sql, Class<T> elementType) throws DataAccessException {
        return jdbcTemplate.query(sql, new SingleColumnRowMapperWapper(elementType));
    }

    @Override
    public List<Map<String, Object>> queryForList(String sql) throws DataAccessException {
        return jdbcTemplate.query(sql, new ColumnMapRowMapperWapper());
    }

    @Override
    public Map<String, Object> queryForMap(String sql) throws DataAccessException {
        return jdbcTemplate.queryForMap(sql);
    }

    public class ColumnMapRowMapperWapper extends ColumnMapRowMapper{
        long startDate = System.currentTimeMillis();
        @Override
        protected Object getColumnValue(ResultSet rs, int index) throws SQLException {
            if(startDate+readTimeOut < System.currentTimeMillis()) throw new SQLException("数据读取超时");
            return super.getColumnValue(rs, index);
        }
    }

    public class SingleColumnRowMapperWapper<T> extends SingleColumnRowMapper<T>{

        SingleColumnRowMapperWapper(Class<T> requiredType){
            super(requiredType);
        }

        long startDate = System.currentTimeMillis();
        @Override
        public T mapRow(ResultSet rs, int rowNum) throws SQLException {
            if(startDate+readTimeOut < System.currentTimeMillis()) throw new SQLException("数据读取超时");
            return super.mapRow(rs, rowNum);
        }
    }

  

测试调用

    public static JdbcTemplate jdbc(){
        if(JDBC_TEMPLATE == null){
            synchronized (CommonUtils.class){
                if(JDBC_TEMPLATE == null){
                    JDBC_TEMPLATE = new JdbcTemplateWapper(SpringApplicationContextUtil.getBean(JdbcTemplate.class));
                }
            }
        }
        return JDBC_TEMPLATE;
    }

 

超过queryTimeOut 会报以下错误

 超过读取时间10s 会报以上 手动抛的错误

 

成功解决数据库链接资源消耗完 卡死问题

 

标签:available,return,解决方案,Connection,jdbcTemplate,sql,new,public,JdbcTemplate
From: https://www.cnblogs.com/lccsdncnblogs/p/17451639.html

相关文章

  • ubuntu报错:The following signatures couldn't be verified because the public key i
    当在ubuntu中加入了第三方源,没有设置公钥更新索引的时候就会提示Thefollowingsignaturescouldn'tbeverifiedbecausethepublickeyisnotavailable:NO_PUBKEY082AB56BA14FE591Readingpackagelists...DoneW:GPGerror:http://mirrors.tuna.tsinghua.edu.cn/za......
  • 岩土工程中振弦类采集仪的完整解决方案分析
    岩土工程中振弦类采集仪的完整解决方案 振弦传感器和振弦采集仪及在线监测系统形成一套完整链条的岩土工程监测案例一些岩土工程项目需要进行振动监测以确保安全和可靠性。振弦传感器和振弦采集仪是一种常用的监测设备,可以用于监测地基、桥梁和建筑物的振动特征。以下是一个......
  • 岩土工程中振弦类采集仪的完整解决方案案例
    岩土工程中振弦类采集仪的完整解决方案振弦传感器和振弦采集仪及在线监测系统形成一套完整链条的岩土工程监测案例一些岩土工程项目需要进行振动监测以确保安全和可靠性。振弦传感器和振弦采集仪是一种常用的监测设备,可以用于监测地基、桥梁和建筑物的振动特征。以下是一个振弦传......
  • 如何在电话回访中做到客户关怀?提供个性化的服务和定制化的解决方案,增强客户粘性和忠诚
    在电话回访中做好客户关怀,可以有效增强客户的粘性和忠诚度,提高客户保留率。以下是一些具体的建议:记住客户的信息:在回访之前,可以查看客户的历史记录,了解其需求和问题。在回访时可以提醒客户之前的交流或反馈,以此来建立客户的信任感。了解客户的需求:通过对客户进行深入的了解,探究他们......
  • 服务器并发量的简单计算以及简单的分布式解决方案
      上课画的图,感觉不错......
  • 【macOS】iCloud Drive同步异常解决方案(上传/下载时进度条卡住)
    ✨iCloudDrive同步异常如下图上传进度条一直卡着不动✨解决方案Terminal运行如下命令killallbirdcd~/Library/Application\Supportsudocp-rCloudDocs~/Desktop/#备份sudorm-rf~/Library/Application\Support/CloudDocs之后iCloudDrive同步飞快桌面......
  • windows复制粘贴功能失效的解决方案
    解决方案:1、如果远程复制正在进行,先使用任务管理器,强制结束:将任务管理器面板切换到进程,找到rdpclip.exe,选中它,然后点击结束进程。(电脑主要依赖该进程进行粘贴) 2、键盘上按Win+R组合键,弹出“运行”窗口,输入rdpclip.exe,按回车,重新启动复制粘贴功能 3、启动成功后,就可以正常......
  • PowerShell实战系列:按需更改.net解决方案中的项目名称
    一、需求  产品在生命周期中可能会更改名称,比如产品从Product1升级为Product2,为了使产品代码与之同步,产品源码项目名称需要改动,通常一个产品由包含很多项目,手动更改有很大的工作量,且未来该工作仍可能重复(产品继续升级,带来改名需求)。  对于大量且重复的工作,编写脚本可有......
  • 解决方案 | Windows 验证账号出现 0x80190001错误解决
    一、问题描述点击windows开始→账户→更改账户设置→验证,出现下面的错误。 二、解决方法网上流行的是这个方法,https://blog.csdn.net/qq_36393978/article/details/107413791 ,但是这个其实是恢复网络刷新dns的方法,大家可试一试。 如果不行,试试下面的方法,在任务栏搜索框......
  • win11鼠标能动但是无法点击怎么办 win11鼠标能动但是无法点击解决方案(WSG实测可以)
    win11用户在使用电脑的时候遇到了鼠标能动但是无法点击的情况,像这种情况要怎么办呢?你先按住ctrl+alt+delete这组快捷键,然后打开任务管理器,接着选择运行新任务,输入explorer.exe,之后系统就会自动刷新桌面缓存,这个时候应该问题就解决了。如果不行的话,应该是鼠标驱动出问题了,建议大家......