0

テーブルに応じて異なるデータベース接続を作成する必要があるプロジェクトに取り組んでいます。すべてのテーブルと接続の詳細は、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 connectionstableLists 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++;
    }
}

私の質問は- 同様の問題を行うためのより良い設計はありますか? 同様に、各スレッドは異なるデータベース接続を作成し、それをリストに保存して、それらを適切に使用できるようにする必要があります。

4

0 に答える 0