티스토리 뷰

개발/java

java.sql.SQLRecoverableException: IO Error : Connection reset

개발자와코더사이가 PM일까? 2021. 5. 30. 23:00
반응형

고객사에 갔더니 아래의 오류가 딱 하고 나왔다. 음...

java.sql.SQLRecoverableException: IO Error : Connection reset

여기저기 인터넷에서 찾아보면 거의 대부분 오라클 11g이고 ojdbc6.jar에서 생기는 문제이고

아래와 같이 풀면 된다고 한다.

-Djava.security.egd=file:///dev/urandom

근데 잠깐만... 우리 한번 java version을 확인해보자.

나같은 상황은 하나의 톰캣에 오라클 12c와 11g을 쓰고 ojdbc6.jar, 거기에 java8을 쓰는데 java8에서는unrandom은 필요가 없다고 한다.

https://www.baeldung.com/java-security-egd

[

The java.security.egd JVM Option | Baeldung

The java.security.egd JVM startup property affects how the SecureRandom class initializes. Let's explore how changing its value impacts our code.

www.baeldung.com

](https://www.baeldung.com/java-security-egd)

음... 머리가 아파온다. 아직까지 해결하지 못했고 우선 의심 되는 고객 db connection를 테스트 할 수 있는 jar 파일을 만들어서 테스트 예정이다.


package dbTest;  

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.SQLException;  
import java.util.Scanner;  
import java.text.SimpleDateFormat;  
import java.util.Date;  

public class main {  

public static void main(String\[\] args) {  
int connectCount = 0;  
String url = "";  
String id = "";  
String pw = "";  

Scanner scanConnectCount = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성  
System.out.println("connectCount: ");  
String stringConeectCount = scanConnectCount.nextLine(); // 키보드 문자 입력  
if (stringConeectCount == "") {  
connectCount = 0;  
} else {  
connectCount = Integer.parseInt(stringConeectCount);  
}  

Scanner scanUrl = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성  
System.out.println("url: ");  
url = scanConnectCount.nextLine(); // 키보드 문자 입력  

Scanner scanId = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성  
System.out.println("id: ");  
id = scanConnectCount.nextLine(); // 키보드 문자 입력  

Scanner scanPw = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성  
System.out.println("pw: ");  
pw = scanPw.nextLine(); // 키보드 문자 입력  

System.out.println("===================");  
System.out.println("ConnectTest Info");  
System.out.println("connectCount=======" + connectCount);  
System.out.println("dbInfo=============" + url + "/" + id + "/" + pw);  
System.out.println("===================");  

if (connectCount > 0 && url != "" && id != "" && pw != "") {  

for (int i = 0; i < connectCount; i++) {  
Connection conn = null;  

try {  
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
Date time = new Date();  
Class.forName("oracle.jdbc.driver.OracleDriver");  

//System.out.println("Start Time " + format1.format(time));  

long start = System.currentTimeMillis();  

conn = DriverManager.getConnection(url, id, pw);  

long stop = System.currentTimeMillis();  

if ((stop - start) > 1000) {  
System.out.println("connected Time " + (stop - start) + " ms. this is Slow");  
} else {  
System.out.println("connected Time " + (stop - start) + " ms");  
}  

time = new Date();  

//System.out.println("End Time " + format1.format(time));  

conn.close();  

} catch (ClassNotFoundException cnfe) {  

System.out.println("Not Found Class.." + cnfe.getMessage());  

} catch (SQLException se) {  

System.out.println(se.getMessage());  

} finally {  

if (conn != null)  
try {  
conn.close();  
System.out.println("=============conn.close()=========");  
} catch (SQLException e) {  
e.printStackTrace();  
}  
}  

}  
} else {  
System.out.println("===================");  
System.out.println("Connection Info Fail");  
System.out.println("===================");  
}  

}  

}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함