• 记录几个常见问题(202207)


    记录:282

    场景:几个常见问题:

    Java代码执行SQL语句导致线程卡住,不往下执行了。

    CLIENT_PUGIN_AUTH is required。

    Communications link failure。

    java.lang.ClassNotFoundException。

    版本:Spring Boot 2.6.3

    一、案例场景

    1.Java代码执行SQL语句导致线程卡住,不往下执行了

    问题:Java线程池的10个线程,并发在Oracle数据库的表T_DEMO的执行UPDATE语句。但是10个线程都卡住了,导致任务堆积了,而且try catch都没有捕获异常。

    原因:Oracle数据库的表T_DEMO,在PL/SQL客户端对全表执行了FOR UPDATE锁住表,没有提交。导致Java代码在执行UPDATE语句时,获取不到数据库表操作,一直在等待。且没有抛出异常。

    解决:在数据源类中设置超时时间,例如。

    1. DruidDataSource dataSource = new DruidDataSource();
    2. dataSource.setQueryTimeout(60);

    现象:超时,会抛出异常。

    1. Caused by: java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作
    2. at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:630)
    3. at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:564)
    4. at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1151)
    5. at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:771)
    6. at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:299)
    7. at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:498)
    8. at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:152)
    9. at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1052)
    10. at oracle.jdbc.driver.OracleStatement.executeSQLStatement(OracleStatement.java:1531)
    11. at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1311)
    12. at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3746)
    13. at oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:3918)
    14. at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3897)
    15. at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:992)
    16. at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:255)
    17. at org.springframework.jdbc.core.JdbcTemplate.lambda$update$2(JdbcTemplate.java:965)
    18. at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651)
    19. ... 9 more
    20. Caused by: Error : 1013, Position : 0,......

    2.报错:CLIENT_PUGIN_AUTH is required

    报错:java.sql.SQLNontransientConnectionException: CLIENT_PUGIN_AUTH is required

    原因:本例的MySQL数据库版本是5.6.29,而在pom.xml中引入了8.0.23驱动

    解决:MySQL驱动降低版本。

    2.1 pom.xml变更

    高版本

    1. <dependency>
    2. <groupId>mysql</groupId>
    3. <artifactId>mysql-connector-java</artifactId>
    4. <version>>8.0.23</version>
    5. </dependency>

    变更为

    1. <dependency>
    2. <groupId>mysql</groupId>
    3. <artifactId>mysql-connector-java</artifactId>
    4. <version>5.1.49</version>
    5. </dependency>

    2.2 application.yml变更

    MySQL驱动类:

    高版本

    com.mysql.cj.jdbc.Driver

    变更为

    com.mysql.jdbc.Driver

    3.报错:404 Not Found: [no body]

    报错

    1. org.springframework.web.client.HttpClientErrorException$NotFound: 404 Not Found: [no body]
    2. at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:113)
    3. at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:168)
    4. at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122)
    5. at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
    6. at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:819)
    7. at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:777)
    8. at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711)
    9. at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:437)

    解决:本例是访问的服务端Controller的方法变了,重新确定服务端访问路径。

    4.报错:Communications link failure

    报错

    1. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure.
    2. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

    解决:数据库连接信息不对。

    5.报错:ClassNotFoundException

    报错

    Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionIdListener

    原因

    基于Spring Boot 2.6.3的web工程:

    在Tomcat 7的servlet-api.java中没有HttpSessionIdListener。

    在Tomcat 8的javax.servlet-api-4.0.1.jar中有HttpSessionIdListener。

    解决:war包部署环境变更为Tomcat 8。

    以上,感谢。

    2022年7月4日

  • 相关阅读:
    自学Python01-创建文件写入内容
    RFID读写器有哪些功能,由几部分组成,应用在哪方面
    AIGC AI绘画 Midjourney 参数大全详细列表
    数据安全技术专利态势分析
    word转PDF的方法 简介快速
    在微信公众号怎么添加电子优惠券
    分布式内存计算Spark环境部署与分布式内存计算Flink环境部署
    python-opencv 培训课程作业
    解决docker使用pandarallel报错OSError: [Errno 28] No space left on device
    充电桩高压安全测量方案
  • 原文地址:https://blog.csdn.net/zhangbeizhen18/article/details/125610159