如何在Java中实现故障转移数据库?

如何在Java中实现故障转移数据库?,java,database,osgi-bundle,Java,Database,Osgi Bundle,我有一个OSGI捆绑包,它连接到数据库(可以是任何供应商),并通过运行预定义查询来收集结果。现在,我希望有一种机制,在主数据库因任何原因关闭或无法访问时,支持连接到辅助/故障转移数据库 我是如何处理的: try{ connection = DriverManager.getConnection( primaryDbUrl, primaryDbUsername,

我有一个OSGI捆绑包,它连接到数据库(可以是任何供应商),并通过运行预定义查询来收集结果。现在,我希望有一种机制,在主数据库因任何原因关闭或无法访问时,支持连接到辅助/故障转移数据库

我是如何处理的:

try{
        connection = DriverManager.getConnection(
                       primaryDbUrl,
                       primaryDbUsername,
                       primaryDbPassword
                    );
        connection.setAutoCommit(false);
        } catch (SQLException e) {
            connection = DriverManager.getConnection(
                        secondaryDbUrl,
                        secondaryDbUsername,
                        secondaryDbPassword
                   );
            connection.setAutoCommit(false);
        }
到目前为止,该解决方案效果良好。我想知道两件事:

  • 有没有更好的办法处理
  • 是否存在上述代码会失败的情况

  • 您可以将代码分解成循环;如果这两个调用都失败,您可以在指数退避时重试


    理想情况下,我会将两个数据库放在负载平衡器后面,使它们看起来像一个

    感谢您的帮助。将这两个数据库放在负载平衡器后面不是我的选择,因为这些数据库属于第三方。您能详细说明一下您的第一个解决方案吗?如果在连接后第一个数据库出现故障怎么办?您可能需要扩展try-catch的边界,以包括您要触发的最后一条语句。顺便说一句,这不应该在应用程序级别处理。每个数据库都有自己的切换到备份的方式。