dbcp的销毁
使用commons-dbcp-1.2.2.jar的DataSource,发现每次动态编译后连接池中的连接不会释放,新的连接池建立有mssql多出一组连接,只有重新启动tomcat或weblogic才可以释放。

package aaplan.dbutil; import java.io.InputStream; import java.util.Properties; import java.sql.*; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class JdbcUtil { private static DataSource dataSource=null; /** * @param args */ public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } public static DataSource getDataSource() { return dataSource; } public static void release() { if(dataSource !=null){ try { ((org.apache.commons.dbcp.BasicDataSource)dataSource).close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } static{ try{ Properties properties=new Properties(); InputStream inputStream= JdbcUtil.class.getClassLoader().getResourceAsStream("dbcp.properties"); properties.load(inputStream); inputStream.close(); dataSource =BasicDataSourceFactory.createDataSource(properties); System.out.println(dataSource); }catch(Exception e){ e.printStackTrace(); throw new RuntimeException("JdbcUtil Init Error!"); } } }

package aaplan.dbutil; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * Application Lifecycle Listener implementation class DataSorceMgrListener * */ public class DataSorceMgrListener implements ServletContextListener { /** * Default constructor. */ public DataSorceMgrListener() { // TODO Auto-generated constructor stub } /** * @see ServletContextListener#contextInitialized(ServletContextEvent) */ public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("Init context!"); JdbcUtil.getDataSource(); } /** * @see ServletContextListener#contextDestroyed(ServletContextEvent) */ public void contextDestroyed(ServletContextEvent arg0) { System.out.println("Destoryed Context!"); JdbcUtil.release(); } }
解决,写了个ServerContextListener,在里面的Destroyed中人工释放
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2012-06-18 EF的状态跟踪选项与导航属性