テーブルに応じて異なるデータベース接続を作成する必要があるプロジェクトに取り組んでいます。すべてのテーブルと接続の詳細は、config.properties file
. したがって、config.properties
ファイルに接続の詳細が含まれる 2 つのテーブルがあるとします。その後、各スレッドは になるdatabase connections
たびに 2 つになりますrun method
。
以下のメソッドは、プロパティ ファイルを読み取り、ReadTableConnectionInfo object
各テーブルに対して を作成します。
private static void readPropertyFile() throws IOException {
prop.load(Read.class.getClassLoader().getResourceAsStream("config.properties"));
tableNames = Arrays.asList(prop.getProperty("TABLES").split(" "));
for (String arg : tableNames) {
ReadTableConnectionInfo ci = new ReadTableConnectionInfo();
String url = prop.getProperty(arg + ".url");
String user = prop.getProperty(arg + ".user");
String password = prop.getProperty(arg + ".password");
String driver = prop.getProperty(arg + ".driver");
ci.setUrl(url);
ci.setUser(user);
ci.setPassword(password);
ci.setDriver(driver);
tableList.put(arg, ci);
}
}
以下は、特定のテーブルのすべてのテーブル接続情報を保持するクラスです。
public class ReadTableConnectionInfo {
public String url;
public String user;
public String password;
public String driver;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
}
以下のコードから、ReadTask class
複数のスレッドを使用tableList map
して実行しようとconstructor
していrun method
ます。different database connections
tableLists size
ExecutorService service = Executors.newFixedThreadPool(threads);
for (int i = 0; i < threads; i++) {
service.submit(new ReadTask(tableList));
}
public ReadTask(HashMap<String, ReadTableConnectionInfo> tableList) {
this.tableLists = tableList;
}
@Override
public void run() {
int j = 0;
dbConnection = new Connection[tableLists.size()];
statement = new Statement[tableLists.size()];
//loop around the map values and make the connection list
for (ReadTableConnectionInfo ci : tableLists.values()) {
dbConnection[j] = getDBConnection(ci.getUrl(), ci.getUser(), ci.getPassword(), ci.getDriver());
statement[j] = dbConnection[j].createStatement();
j++;
}
}
私の質問は- 同様の問題を行うためのより良い設計はありますか? 同様に、各スレッドは異なるデータベース接続を作成し、それをリストに保存して、それらを適切に使用できるようにする必要があります。