我有一个线程,它在其中创建与Oracle DB的连接,读取内容并写入csv文件。在每个线程中,来自DB的内容都被写入到单独的csv文件中。由于建立了数量为n的连接,它会引发一个异常,说“ORA-00018:超过最大会话数”。请提供一个解决方案来阻止它,但代码应该在同一时间运行。下面是使用的代码。在JAVA中使用多线程限制Oracle连接数的解决方案
host s1 = new host(SYSNAME,SYSID);
s1.start();
class host extends Thread{
String SYSNAME,SYSID;
public host(String SYSNAME, String SYSID){
this.SYSNAME = SYSNAME;
this.SYSID = SYSID;
}
public void run(){
Connection conn;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, username, pwd);
String csv_file = "AverageValuesHost-" + SYSNAME + "-" + SYSID + "_Result.csv";
String host_query = null;
host_query = "My query";
ResultSet res_host = conn.createStatement().executeQuery(host_query);
CSVWriter wr = new CSVWriter(new FileWriter(csv_file), ',');
wr.writeAll(res_host, true);
wr.flush();
wr.close();
conn.close();
}
数据库只允许连接到它。使用连接池(c3p0或dbcp)或增加可建立的连接数(修改oracle的最大连接数)。 – honerlawd
@Kiran:您需要重构代码,以便获取与数据库的连接应该来自连接池(同步)。您的线程需要访问该连接池并获得与数据库的连接,如果没有连接,则线程应该进入睡眠状态。 – Lathy
@Lathy:希望你不明白我的问题。因为所有线程都有自己的功能,所以没有任何同步点。线程不依赖于 –