当前位置: 首页 > 知识库问答 >
问题:

防止Spring在卸载war文件时破坏连接池

阎昌勋
2023-03-14

在开始利用Tomcat的“版本”功能时,我发现当Tomcat卸载以前版本的war文件时,Spring似乎也在破坏连接池。这是一个问题,因为该应用程序的其他(较新)版本需要该连接池

我如何防止这种情况?

脚本:

  1. 部署~/tomcat/webapps/helloworld##v1.war并启动tomcat
  2. HikariCP池正确初始化
  3. 用户登录
  4. 通过Tomcat Manager和Cargo部署新版本(~/tomcat/webapps/hellowworld##v2.war)
  5. 新用户获得v2的war文件。老用户在v1上停留,直到会话超时
  6. 一旦所有v1会话超时,Tomcat将解除部署v1。
  7. 这是问题开始的时候。v2不能再从JNDI获得DB连接

数据源在~/tomcat/conf/server中设置。xml作为GlobalNameResources,并在每个war文件的上下文中引用。xml

共有1个答案

葛泳
2023-03-14

从Spring 3.1开始,Spring增加了一个叫做破坏方法推断的特性。这是用SPR-8751完成的。它所做的是,它需要一个众所周知的销毁方法列表,如关闭关闭(没有参数),并自动将其添加为销毁方法。后来,这也被扩展到自动检测Closeable的实现(在方法推断旁边)。这主要在自动检测需要接收销毁回调的组件时有用。

由于大多数DataSource实现也实现了Closable,它定义了一个close方法,当应用程序取消部署时,它将自动销毁。这可以通过检测close方法(通过反射)或它是可关闭的事实来实现。

javadoc中提到了如何防止调用此方法(即在bean定义中添加一个空的销毁方法(用于Java配置)或销毁方法(用于XML配置)。Spring框架本身的参考指南中也解释了这一点。

 类似资料:
  • 问题内容: 我正在运行gulp 3.6.2,并具有从在线示例中设置的以下任务 每当我的CoffeeScript gulp手表出现错误时,手表就会停止-显然不是我想要的。 正如其他地方推荐的那样 但它似乎不起作用。 我究竟做错了什么? 响应@Aperçu的回答,我修改了方法并尝试了以下操作: 重新启动,然后在我的coffee文件中创建语法错误。相同的问题: 问题答案: 您的函数应如下所示: 我认为您

  • 问题内容: 如果我有一个,并且用户输入了一个国际化域名,则Angular_(编辑:除了不是Angular的错,会_自动将值转换为punycode,这是一个不错的功能,但如果值将显示回给他们。例如 变成 当后端需要该域的原始Unicode版本时,它也会引起问题,而Angular应用会发送punycode版本。 我可以使用例如punycode.js将其转换回去,但是有没有一种方法可以在Angular中

  • 对于Oracle池连接,我使用,但这些连接似乎在数据库中保持活动状态。今天我在连接到Oracle数据库时遇到了一个错误: ORA-12516:TNS:侦听器找不到具有匹配协议栈的可用处理程序 另外,我在dao级别使用jdk7 try-with-resources语法进行连接: 弄不清真正的问题在哪里。我应该使用c3p0而不是OracleDataSource吗?ojdbc7中是否有bug或我的代码中

  • 我正在使用Spring SAML在我的应用程序中实现单点登录。Evreything是集成的,从SSO的角度可以正常工作。我的应用程序的另一个服务也通过安讯士使用HTTP客户端发布,开始失败,并出现以下错误 { http://XML . Apache . org/axis/} stack trace:javax . net . ssl . SSL peer unverified异常:SSL对等方未能

  • 问题内容: 从TABLE布局切换到DIV布局以来,一个普遍的问题仍然存在: 问题 :您用动态文本填充DIV,并且不可避免地会有一个超长单词延伸到div列的边缘,使您的网站看起来不专业。 复古 :这 从未 发生过表布局。一个表格单元格总是可以很好地扩展到最长单词的宽度。 严重性 :我什至在大多数主要站点上都 遇到了 这个问题,尤其是在德国站点上,这些站点甚至连“限速”之类的通用词都非常长(“ Ges

  • 我尝试添加多个csv文件。我已经按照下面的链接。如何在Python中合并200个csv文件 但我的价值观从 到 如何预防这种情况? 提前谢谢