在oracle 9i 中,有一个这样的服务OracleMTSRecoveryService 当把本服务打开的时候
当如果oracle数据只关掉监听器,或把服务停了,
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"scott", "tiger");
这句就会卡死一直不会向下跑
而且这种情况下也不报出错误就是一直停在那里
这是经过测试的
这时候我们就要考虑到超时问题了......
目前有解决方案,但不是很好,就是用有返回值线程设置超时时间,但是
// 创建线程
ExecutorService threadPool = Executors.newSingleThreadExecutor();
// 调用线程池的submit方法执行任务
Future future = threadPool.submit(new MyCallableImpl("select * from emp"));
threadPool.shutdown();
当如果oracle数据只关掉监听器,或把服务停了,
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"scott", "tiger");
这句就会卡死一直不会向下跑
而且这种情况下也不报出错误就是一直停在那里
这是经过测试的
这时候我们就要考虑到超时问题了......
目前有解决方案,但不是很好,就是用有返回值线程设置超时时间,但是
// 创建线程
ExecutorService threadPool = Executors.newSingleThreadExecutor();
// 调用线程池的submit方法执行任务
Future future = threadPool.submit(new MyCallableImpl("select * from emp"));
threadPool.shutdown();

本文探讨了Oracle9i中的OracleMTSRecoveryService服务对数据库连接的影响,特别是当服务运行且监听器关闭时导致的连接超时问题,并提供了一种通过线程池设置超时时间的解决方案。
1082

被折叠的 条评论
为什么被折叠?



