【问题标题】:MyBatis DB connection fail-over mechanism is not workingMyBatis DB 连接故障转移机制不起作用
【发布时间】:2017-12-24 01:45:04
【问题描述】:

我在 Adob​​e 体验管理器中安装了一个 Java 应用程序 (jar) 作为 OSGI 包。

在 Java 应用程序中,我有以下数据源配置: 1. 我正在使用 MyBatis-3 来管理数据源池连接,如下所示: 使用http://www.mybatis.org/mybatis-3/getting-started.html中提到的属性

2.  Creating SQL Session factory in following manner :
       SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

3. Using SQL Server 2014 as my database.

我们有数据库服务器集群,每当我们必须对数据库应用补丁时,我们都会切换数据库服务器。 即使 dataSource URL 保持不变,应用程序也会导致 DB 连接失败错误。 问题仅在捆绑重新启动后得到解决。 连接池有什么方法可以自动重新连接或恢复? 我是 MyBatis、SQL server 和 AEM 的新手,非常感谢任何帮助。

【问题讨论】:

  • 我假设使用您的冷备用方法,所有已打开的数据库连接都将失败。抱歉,我不知道 MyBatis。但是要么你找到更好的集群方法,要么你应该有 ConnectionPool 与验证。这意味着 ConnectionPool 在分发连接之前会进行极其简单的查询。如果这失败了,这个错误的连接将被丢弃并打开一个新的连接。其他人也问过,但在这里没有得到答案:mybatis-user.963551.n3.nabble.com/…

标签: sql-server database-connection aem mybatis osgi-bundle


【解决方案1】:

对您来说最简单的解决方法是设置 pool-ping-query。看来,您的连接无法在切换到冷备用数据库后继续存在。他们必须重新开放。使用此查询,连接池可以检查连接是否仍然正常。如果没有,这个错误的连接将被关闭。

发表评论后,我查看了http://www.mybatis.org/mybatis-3/configuration.html。在那里你应该寻找参数

  • poolPingQuery
  • poolPingEnabled

我会尝试以下配置

<dataSource type="POOLED">
   ...
   <property name="poolPingQuery" value="/* ping */ SELECT 1"/>
   <property name="poolPingEnabled" value="true"/>
</dataSource>

但请注意,这仍然不是一个优雅的切换。它只检查池中的连接。您所有正在运行的事务仍然会出错。但是,如果您的事务很短、不是大规模并行且不是非常关键,那可能没问题。

【讨论】:

  • 感谢您的快速周转,我阅读了有关 poolPingQuery 的信息,但我没有发现它可用于重新建立连接。我们有什么办法可以优雅地切换以避免正在进行的用户会话出现任何错误?
  • 我认为,这不适用于您的主动/被动 SQL 服务器集群。您需要一个阶段,两个节点都处于活动状态。在此 Active/Active 阶段,您必须优雅地切换所有连接。如果故障转移那么重要,那么也许您必须放弃连接池。这可能会使一些事情变得更好。但性能会受到影响。
  • 我查看了 SQL 服务器文档。它说“发生故障转移时,虚拟网络名称 (VNN) 在启动后注册到新的活动节点。此过程对于连接到 SQL Server 的客户端或应用程序是透明的,并且此 最大限度地减少停机时间应用程序或客户在故障期间遇到的问题。”因此故障转移仅适用于 new 连接。恐怕,您必须仔细测试 SQL 集群的行为方式。最终“选择 1”仍然有效,即使连接的节点不再处于活动状态。
  • 所以在这种情况下,我可以按照stackoverflow.com/questions/10982281/…中的建议使用“/* ping */ SELECT 1”而不是“SELECT 1”
猜你喜欢
  • 2014-01-21
  • 2014-02-02
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 2015-01-29
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多