gpt4 book ai didi

java - 在java中切换数据库连接的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 08:53:41 25 4
gpt4 key购买 nike

我正在用java开发一个应用程序,它必须不断地对远程数据库执行查询,但是,如果这种连接失败,则必须在本地sqlite数据库上执行相同的查询。我已经尝试过这种方法:

public static Connection connect() {
Connection c = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
c = DriverManager.getConnection("jdbc:mysql://192.168.1.30/database", "root", "");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (com.mysql.cj.jdbc.exceptions.CommunicationsException e) {
//Here I get the connection to sqlite in case of exception
c = SQLiteDb.sqliteInit();
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return c;

}

是否有另一种更简洁的方法来处理这些情况?

最佳答案

首先你应该使用连接池,否则每个操作都会创建一个新的连接,这是非常昂贵的。Java 有许多可用的连接池。例如Hikari提供了相当不错的连接池,还有C3P0和DBCP。

现在,有一个称为数据源的抽象,可以根据您使用的基础架构来使用它。

我不建议使用普通 JDBC,因为它的级别较低且容易出错。看看 JOOQ 或 MyBatis。

现在,为了满足回退的要求,您可以保留两个带有连接池和所有内容的数据源,并以一种方式组织流程,如果对 mysql 的调用失败,则使用 sql lite。但请注意,如果 mysql 宕机了,可能每次都调用它是没有意义的,也许它会尝试恢复。

以断路器模式为例,它将解决这个问题。

除此之外,我觉得这个问题太宽泛了,所以更适合非常具体的技术问题。这些答案有助于克服具体的技术难题。如果您想出这样的东西,请随时询问:)

关于java - 在java中切换数据库连接的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623881/

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