错误信息:

--KStudio客户端工具错误信息
The conncetion attempt failed.Reason:connect time out --Java应用程序控制台日志
Caused by :java.net.SocketTimeoutException: connect time out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)

问题现象:

Navicat客户端工具可以正常连接KingbaseES数据库,Navicat客户端工具连接数据库未使用jdbc驱动。

使用jdbc驱动的Java应用程序及KStudio客户端工具不能正常连接KingbaseES数据库。

Java应用程序及KStudio客户端工具连接KingbaseES数据库均使用jdbc驱动程序跟数据库建立通信。

排查过程:

Navicat客户端工具连接数据库未使用jdbc驱动程序,可以正常连接KingbaseES数据库,说明问题原因跟网络和防火墙没有关系。

通过Java应用程序控制台日志发现客户端/应用程序在尝试使用IPv6,但是网络环境不支持IPv6,所以无法建立连接。

Caused by :java.net.SocketTimeoutException: connect time out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)

通过以下网址得知,在使用VPN连接的环境部分VPN软件会导致Java应用jdbc驱动默认使用IPv6,不使用IPv4。

https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html

Network Configuration

In general, Java Web Start applications use the system network configuration by default, and applets use the browser network settings. You can set network proxies explicitly using Java Control Panel.

In particular, the Java technology networking layer automatically detects what networking stack to use. However, sometimes autodetection does not work and you may observe "Permission Denied" exceptions trying to open a socket to download your application or applet, even while the same URL is accessible using the same proxy settings with other tools. This problem was observed on some Windows 7 systems when VPN software is used. This can be resolved by explicitly passing a parameter to the JVM:

-Djava.net.preferIPv4Stack=true
See the section on how to pass parameters to JVM for details.

通过询问同事得知,连接有问题的环境确实有在使用VPN(Easy connect )软件。

在Java代码添加System.setProperty("java.net.preferIPv4Stack","true"); 添加后可以正常运行Java应用。

到此基本可以确定,问题出现原因主要就是由于使用VPN软件导致不能正常建立IPv6连接,Java程序又尝试使用IPv6导致。

可以通过显式设置jvm参数 -Djava.net.preferIPv4Stack=true,使Java应用程序优先使用IPv4来解决此问题。

解决方法:

在KStudio客户端工具配置文件kstudio.ini 加入 -Djava.net.preferIPv4Stack=true 问题解决。

Java应用程序解决方法:

  1. 禁用系统IPv6.

  2. 设置Java系统属性

    在Java应用程序代码里面添加 System.setProperty("java.net.preferIPv4Stack","true");
    使用java -jar 启动Java应用时,增加参数 -Djava.net.preferIPv4Stack=true
    设置环境变量_JPI_VM_OPTIONS和_JAVA_OPTIONS -Djava.net.preferIPv4Stack=true
    设置开发工具IDEA 的vm options -Djava.net.preferIPv4Stack=true
  3. 添加环境变量

    windows系统 set "JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true"
    Linux系统 export _JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true"

关于参数 java.net.preferIPv4Stack

官方文档解释:

If IPv6 is available on the operating system, the underlying native socket will be an IPv6 socket. This allows Java applications to connect to, and accept connections from, both IPv4 and IPv6 hosts.

java.net.preferIPv4Stack=false

在支持IPv6的双栈系统上,使用Java的Socket会默认通过底层native方法创建一个IPv6 Socket,这个IPv6 Socket可以同时支持和IPv4或IPv6主机通信。

java.net.preferIPv4Stack=true

如果设置为true,Java程序将无法使用IPv6进行网络通信,也就是仅支持IPv4。通过IPv6访问就会访问不通。

通过以下代码获取默认优先使用IPv4还是IPv6

System.out.println(InetAddress.getByName("[www.aliyun.com](http://www.aliyun.com)"));

参考

https://www.cisco.com/c/zh_cn/support/docs/security/hostscan/117097-trouble-java7-00.html

KStudio-Java程序连接KingbaseES数据库异常的更多相关文章

  1. 解决Java程序连接mysql数据库出现CommunicationsException: Communications link failure错误的问题

    一.背景 最近在家里捣鼓一个公司自己搭建的demo的时候,发现程序一启动就会出现CommunicationsException: Communications link failure错误,经过一番排 ...

  2. java程序连接MySQL数据库

    驱动程序:mysql-connector-java-5.1.7-bin.jar. 程序示例如下: package commonProject; import java.sql.Connection; ...

  3. java程序连接hive数据库遇到的问题

    今天,打算学习一下用hadoop做后台,搭建一个网站,首先第一步便是在本机的eclipse中连接到虚拟机上的hive中,原本以为很简单,但是过程很是艰难.特意做总结 首先hive的版本问题就是一个很大 ...

  4. Java程序连接各种数据库的driver和url形式

    1.Oracle数据库 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = & ...

  5. Java连接SqlServer2008数据库(转)

    Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...

  6. java.sql.SQLException: Io 异常: Connection reset

    当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLExc ...

  7. Java 操作MySql数据库

    Java 项目开发中数据库操作是很重要的一个方面,对于初学者来说,MySql是比较容易熟悉的一种常见数据库,这篇文章记录了如何用Java来操作MySql数据库. 第一章 JDBC的概念 JDBC(Ja ...

  8. Java实现mysql数据库备份

    Runtime是一个与JVM运行时环境有关的类,这个类是Singleton的. Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法. ...

  9. java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)(ERR=12505)(ERR

    dbc 链接orcal出错 java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)( ...

  10. spring+ibatis问题1—— 程序报错:java.sql.SQLException: Io 异常: Connection reset by peer, socket write error; ”或“java.sql.SQLException 关闭的连接”异常

    转自:http://blog.sina.com.cn/s/blog_1549fb0710102whz2.html spring+ibatis程序测试时报错:java.sql.SQLException: ...

随机推荐

  1. DevOps 必备的 Kubernetes 安全清单

    Kubernetes 是当今许多公司采用的容器编排平台,它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群.然而从原则上来说,Kubernetes 并不是一个安全的平台,因为它缺乏 ...

  2. 解决 linux mint 安装显卡驱动失败解决

    前言 安装显卡驱动的基本流程就是,禁用 nouveau驱动,然后安装 nnvidia驱动,然后重启电脑.但是我重新启动, 使用NVIDIA X Server Settings查看一直显示空白,毫无疑问 ...

  3. 面试官:介绍一下 Redis 三种集群模式

    小码今天去面试. 面试官:给我介绍一下Redis集群, 小码:啊,平时开发用的都是单机Redis,没怎么用过集群了. 面试官:好的,出门右转不谢. 小码内心困惑:在小公司业务量也不大,单机的 Redi ...

  4. SSH(二)框架配置文件

    在引入了宽假所需要的jar包后,引入相应配置文件. 一.Struts2的配置文件: 1.Struts2的黑心过滤器,在web.xml中引入: <!-- struts2框架的核心过滤器  clas ...

  5. 【Java SE】Day09 继承、super、this、抽象类

    一.继承 1.概述 多个类具有相同属性和行为,共性抽取到一个类中(父类) 父类更通用,子类更具体 2.继承后的成员变量 本类:this.成员变量名 父类:super.成员变量名 3.继承后的成员方法 ...

  6. 【Java SE进阶】Day13 Stream流、方法引用

    〇.总结 Stream流的方法:forEach.filter.map.count.limit.skip.concat(结合之前的Collectors接口) 方法引用:Lambda的其他类方法体相同,如 ...

  7. 【sqoop】简介、原理、安装配置测试、导入导出案例、脚本打包、常见命令及参数介绍、常用命令举例

    一.sqoop简介 用于在Hadoop(Hive)与传统的数据库(mysql.oracle...)之间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等 ...

  8. k8s-学习笔记总结(从入门到放弃的学习路线)

    刚入门学习k8s,我觉得挺难的,一头雾水,买了一本<Kubernetes权威指南>,真的很厚.我觉得作为应用开发人员的学习路线,不要想着一口气看完k8s的所有概念,要逐步学习,要看完这么厚 ...

  9. vba 数组判断与转换

    Private Function CountArr(arr)'*****************************'计算数组是几维数组'***************************** ...

  10. Kubernetes单机创建MySQL+Tomcat演示程序:《Kubernetes权威指南》第一章demo报错踩坑

    引言 最近做边缘计算项目,因为没有基础,所以首先学习Kubernetes.感觉系统的中文入门资料比较少,只找到<Kubernetes权威指南>(龚正.吴治辉等著,下称<指南>) ...