为这个问题写一个好的标题和在网上搜索它一样困难。
我有很多项目,有些正在维护中(它们多年来一直富有成效),有些正在积极开发中。这是一个重要的事实,因为问题发生在我计算机上的所有项目上,而不是其他项目上。
问题是我在tomcat上运行所有web项目,它们都有数据库连接。我总是使用“终止”按钮而不是“停止”按钮来从 eclipse 中重新启动或停止 tomcat。
对于那些不知道的人,终止按钮是从日志控制台或调试控制台停止应用程序的红色按钮,而停止按钮是同一个红色按钮,但在服务器控制台上。
从终止按钮而不是停止按钮停止服务器要快得多,问题是自从我升级到 Helios 后,我的数据库连接在终止服务器时不再关闭......他们在停止它们时关闭它们通常。
不用说我发现这个是因为数据库服务器(Oracle、MySQL 和 SQLServer)开始出现“太多连接”错误。
这让我很头疼,因为代码与这个问题无关,不同项目中不同类型的数据库管理都有同样的问题,只有在我的机器上!是的,我已经在其他计算机上尝试过,但没有出现问题。
我已经尝试了所有我能想到的格式化...
- 升级到 Indigo
- 重新安装了 Galileo(甚至下载了一个全新的副本)
- 重新安装并尝试了不同的数据库
- 尝试了不同版本的 Tomcat(6 和 7)
我开始认为这可能不是 IDE 的问题,而是在我升级 eclipse 时碰巧开始的。
欢迎提出任何建议!
最佳答案
当您使用那个红色按钮停止 Tomcat 时,实际上请求 Tomcat 停止它自己。如果您的 Web 应用程序的某些 SQL 语句被阻塞,则 Tomcat 不会停止。这可能会导致连接泄漏。
为什么 SQL 语句会阻塞?如果另一个数据库用户更新或删除您的应用程序尝试更新/修改的相同记录,通常会发生这种情况。
但是,在我的例子中,Eclipse 会在大约 30 秒后显示一个弹出窗口,警告 Tomcat 没有自行停止。弹出窗口询问是否应该终止 Tomcat(即使存在被阻止的连接也应该终止)。
关于在 Eclipse 上终止(不停止)tomcat 时数据库连接泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618080/