gpt4 book ai didi

java - 数据源 Microsoft JDBC Driver for SQL Server(AlwaysOn 可用性组)

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:31 26 4
gpt4 key购买 nike

我有一个与以下场景相关的问题:使用 Microsoft JDBC Driver 4.0 从 Java 应用程序连接到设置了 AlwaysOn 可用性组以实现高可用性的 SQL Server 2014

通过此设置,我们将连接到可用性组监听器(在数据库连接字符串中指定,而不是任何特定实例),以便监听器可以妥善处理数据库故障转移等,并且如果当前主实例在 AG 集群中出现故障,它会尝试在幕后连接到下一个可用实例。

我的问题是,

  1. 在 j2ee 应用程序服务器端配置的数据源(我们使用 WebSphere)中,数据源已池化的那些连接会发生什么?

  2. 当数据库出现故障时,虽然 AG 监听器会尝试在数据库端重新连接到下一个可用的数据库,但 AG 监听器是否也会通过 jdbc 驱动程序向应用程序服务器上创建的数据源发送事件或其他内容,并确保丢弃数据源已池化的连接并创建新的连接,以便应用程序端的事务不会失败(尽管它们可能会持续一段时间,直到创建新连接并故障转移成功),或者 java 应用程序只能在请求后才能发现从数据源获取它?

最佳答案

WebSphere Application Server 能够处理不良连接并将其从池中删除。发生这种情况的确切时间取决于一些可配置选项以及 Microsoft JDBC 驱动程序如何充分利用 javax.sql.ConnectionEventListener API 将通知发送到应用程序服务器。在 JDBC 驱动程序立即为所有连接发送 connectionErrorOccurred 事件的理想情况下,WebSphere Application Server 会通过从池中删除所有这些连接并将当前正在使用的任何连接标记为坏连接来进行响应,以便应用程序关闭句柄后该连接不会返回到池中。如果缺少这一点,WebSphere Application Server 将在应用程序下次使用时发现第一个错误连接。它可以通过 JDBC 驱动程序当时发送的 connectionErrorOcurred 事件发现,也可以在检查异常的 SQLState/错误代码是否存在已知的不良连接指示时发现该事件。然后,WebSphere Application Server 根据配置的清除策略从池中清除不良连接。有 3 个选项:

  1. 整个池的清除策略 - 所有连接均被删除池和正在使用的连接标记为坏,这样它们就不会汇总。
  2. 仅清除失败连接的策略 - 仅实际发生错误的具体连接是从池中删除或标记为坏且不返回池
  3. 验证所有连接的清除策略 - 所有连接均已验证测试有效性(Connection.isValid API)并找到连接坏的从池中删除或标记为坏而不是回到了水池。发现有效的连接保留在池并继续使用。

根据您的描述,我不确定您使用的是传统 WebSphere Application Server 还是 Liberty。如果是传统方式,则有一个额外的选项用于在连接从池中移出时对其进行预测试,但请注意,打开此选项可能会对性能产生影响。也就是说,需要注意的一件事是,无论上述情况如何,您的应用程序始终需要能够处理由于连接不良而导致错误的可能性(即使连接池被清除,连接在使用时也可能会变坏),并通过请求新连接并在新事务中重试操作来进行响应。

关于java - 数据源 Microsoft JDBC Driver for SQL Server(AlwaysOn 可用性组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35527666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com