最近项目中写了个提数的的系统,该系统架构类似Hadoop里面的namenode和tasknode工作方式,客户端好像是tasknode,服务端namenode,是通过http通讯。
客户端从服务端领取提数任务时候,每个任务都启动下单独的客户端(jar包)去执行,提取数据生成cvs或者txt的文档,发送到网盘中,然后客户端执行完成退出。
mysql和oracle通过JDBC方式去查询,hive是通过调用hive的CLI去查询。
因为提数需要执行很长时间,所以需要对JDBC的查询超时进行设计,通过API查询是通过Statement类的setQueryTimeout方法设置超时时间,在设置的时候发现个的问题,比如说stat.setQueryTimeout(1);查询的数据的执行时间已经大于1s,但是并没有抛异常,而是进程一直等待,使用的jdbc驱动是使用mysql-connector-java-5.1.5,后来把jar的换成5.1.24就抛异常,看来是jar版本的问题,后来去上mysql的bug列表也找到这个问题的描述,和我遇见的问题一样,http://bugs.mysql.com/bug.php?id=31698 ,问题虽然不是很严重,写出来省的大家再走弯路。