datax-web icon indicating copy to clipboard operation
datax-web copied to clipboard

[BUG] 添加数据源-「MySQL]-测试连接时,Server端报closing inbound before receiving peer's close_notify错误

Open tangwenixng opened this issue 5 years ago • 4 comments

在页面中添加数据源-选择mysql--测试连接

前台提示显示 ‘连接成功’,但是server控制台打印如下错误。

Describe the bug

Wed Nov 11 11:41:39 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Wed Nov 11 11:41:39 CST 2020 WARN: Caught while disconnecting...

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
	at sun.security.ssl.Alert.createSSLException(Alert.java:133)
	at sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at sun.security.ssl.TransportContext.fatal(TransportContext.java:314)
	at sun.security.ssl.TransportContext.fatal(TransportContext.java:270)
	at sun.security.ssl.TransportContext.fatal(TransportContext.java:261)
	at sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:656)
	at sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:635)
	at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:2249)
	at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4232)
	at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1472)
	at com.wugui.datax.admin.service.impl.DatasourceQueryServiceImpl.checkConnection(DatasourceQueryServiceImpl.java:141)
	at com.wugui.datax.admin.controller.JobDatasourceController.dataSourceTest(JobDatasourceController.java:180)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

经排查,前端并没有传递other参数至后台,导致BaseDataSource.appendOther 无法拼接参数

//BaseDataSource.java
private void appendOther(StringBuilder jdbcUrl) {
    String otherParams = filterOther(getOther());
    if (StringUtils.isNotEmpty(otherParams)) {
      String separator = "";
      switch (dbTypeSelector()) {
        case CLICKHOUSE:
        case MYSQL:
        case ORACLE:
        case POSTGRESQL:
          separator = "?";
          break;
        case DB2:
          separator = ":";
          break;
        case HIVE:
        case SQLSERVER:
          separator = ";";
          break;
        default:
          logger.error("Db type mismatch!");
      }
      jdbcUrl.append(separator).append(otherParams);
    }
  }

最终mysql的JDBC URL 如下:jdbc:mysql://localhost:3306/aviation_job_card

在后面拼接?useSSL=false即可解决以上报错

tangwenixng avatar Nov 11 '20 03:11 tangwenixng

请帮忙说明下是那个版本,谢谢!

WeiYe-Jing avatar Nov 11 '20 08:11 WeiYe-Jing

请帮忙说明下是那个版本,谢谢!

dev 版本

tangwenixng avatar Nov 11 '20 08:11 tangwenixng

mysqlreader + mysqlwriter的默认jdbc驱动版本太低了,升级reader+writer相关lib包版本: 升级mysqlwriter示例 👇 mysql-connector-java: 8.0.30 https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar

MagicFollower avatar Jan 01 '23 15:01 MagicFollower

谢谢您的来信,您的邮件已收到!

tang350476527 avatar Jan 01 '23 15:01 tang350476527