dns临时失效时的解决方案
缘起:手机客户端在某些情况下,DNS无法解析,导致运行异常。
想到一种方法来解决,用的是java的代码,可以参考以解决Android的问题。
走了一点弯路,最后还好想明白了,默认使用ip解析,避免dns从未可用的情况,不使用localhost和loop,因为它们是单例,搞的代码如下:
注:版权所有,转载请注明出处~
缘起:手机客户端在某些情况下,DNS无法解析,导致运行异常。
想到一种方法来解决,用的是java的代码,可以参考以解决Android的问题。
走了一点弯路,最后还好想明白了,默认使用ip解析,避免dns从未可用的情况,不使用localhost和loop,因为它们是单例,搞的代码如下:
注:版权所有,转载请注明出处~
Android 2.3有个bug,需要重新改造SSLSocketFactory,把socket中的impl对象实例中注入带host信息的InetAddress及port。样例代码如下:
@Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose)throws IOException, UnknownHostException {
Socket sk = xx.getSocketFactory().createSocket(socket, host, port, false);
//特殊解决方案,解决android 2.3 SSL不能重用session问题
try {
Field implFiled = Socket.class.getDeclaredField("impl");
implFiled.setAccessible(true);
SocketImpl impl = (SocketImpl) implFiled.get(sk);
Field addFiled = SocketImpl.class.getDeclaredField("address");
addFiled.setAccessible(true);
addFiled.set(impl, InetAddress.getByName(host));
Field portFiled = SocketImpl.class.getDeclaredField("port");
portFiled.setAccessible(true);
portFiled.set(impl, port);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return sk;
}
今天看到一个不规范的用法:finally中有return,例子如下:
public static void main(String[] args) {
System.out.print(a());
}
public static int a() {
try {
return 10;
} catch (Throwable t) {
return 11;
} finally {
return 12;
}
}
执行结果是12,说明是以最终的finally返回为准的。
当Oracle出现IO瓶颈时,用下面的SQL可以查当前执行的SQL
SELECT osuser, username, sql_text
from v$session a, v$sqltext b
where a.sql_address =b.address
order by address, piece;
顺便附上查到的完整资料: