该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
测试说明:1.远程数据库连接,2.观察日志每个线程在获取连接时都会耗时5秒,导致在获取到第12个的时候超过60秒就报错了
同样的程序同样的数据库放到同事mac本子上跑就没有问题
吧里有没有人mac上本地测试有遇到过这种情况或者知道原因的,猜测可能是本机连接远程服务器有问题,但不知道在哪配置或修改
//测试类
public class Test {
public static void main(String[] args) {
List list = new ArrayList<>();
//我本地测试时线程开到11,12个的时候就会报错了
for(int i=0;i<50;i++){//开50个线程
Thread thread = new Thread(){
@Override
public void run(){
System.out.println();
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:oracle:thin:@127.0.0.1:18009:crma";//测试换成自己用的远程数据库
Connection conn = null;
long t1 = 0L;
long t2 = 0L;
long t3 = 0L;
String tid = Thread.currentThread().getName()+"|"+Thread.currentThread().getId()+":: ";
try {
t1 = System.currentTimeMillis();
conn = DriverManager.getConnection(url, "dbcustopr", "jwu7fCnx");//用户名密码记得改
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(tid+"--连接创建完成");
t2 = System.currentTimeMillis();
String sql = "select 1 from dual";
try {
Statement sts = conn.createStatement();
t3 = System.currentTimeMillis();
System.out.println(tid+"2-1用了"+(t2 - t1)/1000+"s");
System.out.println(tid+"3-1用了"+(t3 - t1)/1000+"s");
System.out.println(tid+"3-2用了"+(t3 - t2)/1000+"s");
int count = sts.executeUpdate(sql);
System.out.println("影响的行数:"+count);
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if (conn != null && !conn.isClosed()) {
conn.close();
System.out.println("连接关闭");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
};
};
list.add(thread);
thread.start();
}
for(Thread thread : list){
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("跑完了。。。。");
}
//报错
Thread-47|57:: --连接创建完成
Thread-47|57:: 2-1用了5s
Thread-47|57:: 3-1用了5s
Thread-47|57:: 3-2用了0s
影响的行数:1
连接关闭
Thread-23|33:: --连接创建完成
Thread-23|33:: 2-1用了10s
Thread-23|33:: 3-1用了10s
Thread-23|33:: 3-2用了0s
影响的行数:1
连接关闭
Thread-3|13:: --连接创建完成
Thread-3|13:: 2-1用了15s
Thread-3|13:: 3-1用了15s
Thread-3|13:: 3-2用了0s
影响的行数:1
连接关闭
Thread-14|24:: --连接创建完成
Thread-14|24:: 2-1用了20s
Thread-14|24:: 3-1用了20s
Thread-14|24:: 3-2用了0s
影响的行数:1
连接关闭
Thread-4|14:: --连接创建完成
Thread-4|14:: 2-1用了25s
Thread-4|14:: 3-1用了25s
Thread-4|14:: 3-2用了0s
影响的行数:1
连接关闭
Thread-45|55:: --连接创建完成
Thread-45|55:: 2-1用了30s
Thread-45|55:: 3-1用了30s
Thread-45|55:: 3-2用了0s
影响的行数:1
连接关闭
Thread-6|16:: --连接创建完成
Thread-6|16:: 2-1用了35s
Thread-6|16:: 3-1用了35s
Thread-6|16:: 3-2用了0s
影响的行数:1
连接关闭
Thread-31|41:: --连接创建完成
Thread-31|41:: 2-1用了40s
Thread-31|41:: 3-1用了40s
Thread-31|41:: 3-2用了0s
影响的行数:1
连接关闭
Thread-8|18:: --连接创建完成
Thread-8|18:: 2-1用了45s
Thread-8|18:: 3-1用了45s
Thread-8|18:: 3-2用了0s
影响的行数:1
连接关闭
Thread-20|30:: --连接创建完成
Thread-20|30:: 2-1用了50s
Thread-20|30:: 3-1用了50s
Thread-20|30:: 3-2用了0s
影响的行数:1
连接关闭
Thread-10|20:: --连接创建完成
Thread-10|20:: 2-1用了55s
Thread-10|20:: 3-1用了55s
Thread-10|20:: 3-2用了0s
影响的行数:1
连接关闭
java.sql.SQLRecoverableException: 无法从套接字读取更多的数据
at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:456)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:397)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:460)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:594)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:600)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.sitech.crmtime.ordersvc.job.expireSvcCfm.Test$1.run(Test.java:40)
Exception in thread "Thread-41" java.lang.NullPointerException
at com.sitech.crmtime.ordersvc.job.expireSvcCfm.Test$1.run(Test.java:51)
Thread-41|51:: --连接创建完成
java.sql.SQLRecoverableException: 无法从套接字读取更多的数据
at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:456)
Thread-36|46:: --连接创建完成
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:397)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:460)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:594)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:600)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.sitech.crmtime.ordersvc.job.expireSvcCfm.Test$1.run(Test.java:40)
Exception in thread "Thread-36" java.lang.NullPointerException
at com.sitech.crmtime.ordersvc.job.expireSvcCfm.Test$1.run(Test.java:51)
Thread-16|26:: --连接创建完成
}