【问题标题】:Connecting to multiple databases with multiple threads使用多个线程连接到多个数据库
【发布时间】:2016-02-04 02:54:31
【问题描述】:

我目前正在尝试连接到不同的计算机,以便导入存储在每台计算机的本地数据库中的记录。到目前为止,我看到的关于连接池的帖子是它为单个数据库创建了一个连接池。有没有办法使用线程创建与每台计算机的连接以使任务更快?如果没有,连接和断开不同计算机的最有效方法是什么?

【问题讨论】:

  • 我不是这个领域的专家,但你的问题对我来说似乎很广泛。
  • 您需要同时打开多个连接吗?您可以遍历每个“服务器”并导入您需要的记录
  • 我希望能够同时拥有多个连接,这样可以更快地完成任务。将多个 Connection 实例连接到不同的服务器是一种好方法吗?即在每个线程中打开和关闭一个新的连接。

标签: java database multithreading


【解决方案1】:

你可以这样做

public static void main(String... strings) {

//Pool of 5 threads
ExecutorService threadPool=Executors.newFixedThreadPool(5);
List<SQLServer> servers=new ArrayList<>();

SQLServer mySql1=new SQLServer();
mySql1.setUrl("jdbc://localhost:3306");
mySql1.setDatabase("testDb1");
mySql1.setUsername("admin");
mySql1.setPassword("root");
mySql1.setDriverClass("com.mysql.jdbc.Driver");

SQLServer mySql2=new SQLServer();
mySql2.setUrl("jdbc://localhost:3306");
mySql2.setDatabase("testDb2");
mySql2.setUsername("admin");
mySql2.setPassword("root");
mySql2.setDriverClass("com.mysql.jdbc.Driver");

//You can add as many as you want.
servers.add(mySql1);
servers.add(mySql2);

servers.forEach(s->{
    SQLClient sqlClient=new SQLClient(s);
    threadPool.execute(sqlClient);
});
}

class SQLClient implements Runnable {
private SQLServer sqlServer;

public SQLClient(SQLServer server) {
sqlServer = server;
}

@Override
public void run() {
try {
    Class.forName(sqlServer.getDriverClass());
}
catch (ClassNotFoundException e) {
    System.out.println("Where is your MySQL JDBC Driver?");
    e.printStackTrace();
    return;
}
Connection connection = null;

try {
    connection =  DriverManager.getConnection(sqlServer.getUrl()+"/"+sqlServer.getDatabase(),
        sqlServer.getUsername(), sqlServer.getPassword());

}
catch (SQLException e) {
    System.out.println("Connection Failed! Check output console");
    e.printStackTrace();
    return;
}

if (connection != null) {
    System.out.println("You made it, take control your database now!");


    try {
    Statement statement=connection.createStatement();
    statement.execute("your query");
     // You can fetch you data here
    }
    catch (SQLException e) {
    e.printStackTrace();
    }
}
else {
    System.out.println("Failed to make connection!");
}
}

}

class SQLServer {
String username;
String password;
String url;
String database;
String driverClass;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getDatabase() {
return database;
}

public void setDatabase(String database) {
this.database = database;
}

public String getDriverClass() {
return driverClass;
}

public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2014-07-04
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多