2023年7月21日发(作者:)
Spring⼯具类ScriptUtils使⽤注意点记录使⽤Spring提供的⼯具类ScriptUtils执⾏sql脚本⽂件的⼀个注意事项使⽤eSqlScript⽅法执⾏脚本的时候需要⼿动释放数据库连接注意,注意,注意重要的事情说3遍,并且记录⼀下。截图中红框选中的部分: 这个⽅法不会释放数据库连接。我看⽹上不少⼈对这个⼯具类的使⽤,都没有注意这个问题。⽽且有些地⽅使⽤MyBatis,从MyBatis的SqlSession中获取数据库连接Connection,使⽤完之后没有释放。我想他们之所以没有发现这个问题是因为他们仅仅只是测试了⼀下,发现这个⼯具类这么⽤是"可以的",⽽且很⽅便,并没有在⼀个进程中进⾏多次测试。我也是因为使⽤quartz定时任务才发现的,定时任务每执⾏⼏天(⼀天执⾏⼀次)就会卡在某个地⽅不动了,起初我以为是因为sql脚本太复杂导致数据库⼀直在后台执⾏,今天我在看这个⽅法的说明时才发现了这么⼀段话。于是我就在Controller⾥⾯⽤这个⼯具类重复去执⾏⼀个简单sql⽂件,然后在页⾯不停发送请求,发现页⾯刷新固定次数(具体⼏次忘了)后获取数据库连接的代码:Connection conn = nection();就会卡死。完整的Controller⽅法代码如下:@GetMapping("/testScriptUtils")public boolean testScriptUtils(){ try { File newfile = new File("scripts/"); Resource resource = new FileSystemResource(newfile); EncodedResource resourceDelegate = new EncodedResource(resource); Connection conn = nection(); eSqlScript(conn, resource); //eConnection(conn, dataSource); return true; } catch (ScriptException e) { tackTrace(); } catch (SQLException e) { tackTrace(); } return false;}所以在使⽤这个⼯具类的时候,当它执⾏完了必须、必须、必须记得调⽤上述代码段中的被注释的⽅法:eConnection(conn, dataSource);经测试,这样释放数据库连接之后就不会出现同样的问题了。此处主要针对使⽤了数据库连接池的情景,如果每次调⽤都创建新连接当然不会出现这个问题了,但是这样也是资源浪费,执⾏次数多了也会导致数据库连接资源不够⽤。在此记⼀下,⼤家可以借鉴
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689931706a295314.html
评论列表(0条)