JDBC URL's
データベースごとに異なる接続を作成し、それらの異なる接続を配列に格納しようとしています。
以下のコードでtableList
は、テーブル名とプロパティを含むマップであり、次のようになります。
ConcurrentHashMap<String, ConcurrentHashMap<String, String>> tableList
サンプル例-
{table1={DRIVER=oracle.jdbc.driver.OracleDriver, PASSWORD=stage_cs_user, URL=jdbc_url, SUFFIX=xt1, SQL=sql, USER=user}, table2={DRIVER=driver_name, PASSWORD=pass, URL=jdbc_url2, SUFFIX=xt2, SQL=sql2, USER=user}}
each thread
つまり、JDBCのURLはテーブルごとに異なるため、runメソッド内で2つのデータベース接続を確立する必要があります。だから私はここのリストとcallableStatementとして私のコードでConnectionを作成しました、そしてtableListのサイズに応じてそれは接続を作成します。
テーブルが1つしかない場合は、接続が1つだけになり、テーブルが2つある場合は、接続が2つになります。
などのようなものdbConnection[0]
。dbConnection[1]
そして、テーブルごとに、私はと呼んでいgetRequiredMethods(suffix)
ます。だから私もこれをリストとして作る必要があります。2つのテーブルがある場合、リストに2つのテーブルのメソッドがあるためです。
以下は私のコードですが、runメソッドでそのマップをループし、新しい接続を作成して、に応じてtableList
割り当てる方法と、ここですべてのスレッドセーフの問題を確認する方法はわかりません。dbConenction[0]
dbConnection[1]
tableList size
class Task implements Runnable {
private Connection[] dbConnection = null;
private CallableStatement[] callableStatement = null;
public Task(ConcurrentHashMap<String, ConcurrentHashMap<String, String>> tableList) {
this.tableLists = tableList;
}
@Override
public void run() {
try {
for(loop around lableList map) {
/* Make a connection to database and assign it as dbConnection[0],
dbConnection[1] and callableStatement[0] etc.
*/
dbConnection = getDBConnection(url, username, password, driver);
callableStatement = dbConnection.prepareCall(sql);
ArrayList<Method> methods = getRequiredMethods(suffix);
}
}
}
private ArrayList<Method> getRequiredMethods(String suffix) {
Class<ConstantsTest> consClass = ConstantsTest.class;
Method[] methods = consClass.getDeclaredMethods();
ArrayList<Method> requiredMethods = new ArrayList<Method>();
for (int i = 0; i < methods.length; i++) {
String sName = methods[i].getName();
if (sName.endsWith(suffix)) {
requiredMethods.add(methods[i]);
}
}
return requiredMethods;
}
誰かがここで私を助けることができますか?
更新されたコード:-
私はここでいくつかの進歩を遂げました-私は自分のrunメソッドで以下のコードを書きました-
public void run() {
ArrayList<Method> methods[];
for( int i=0; i<tableLists.size(); i++) {
dbConnection[i] = getDBConnection(tableLists.get(i).get("URL"), tableLists.get(i).get("USERNAME"), tableLists.get(i).get("PASSWORD"), tableLists.get(i).get("DRIVER"));
callableStatement[i] = dbConnection[i].prepareCall(tableLists.get(i).get("SQL"));
methods[i] = getRequiredMethods(tableLists.get(i).get("SUFFIX"));
}
}