工作和学习中遇到的各种报错及解决方案

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 一. Java项目连接MySQL时报错: "The last packet sent successfully to the server was 0 milliseconds ago."1. 出错原因数据库回收了连接, 而系统的缓冲池不知道, 继续使用被回收的连接.

一. Java项目连接MySQL时报错: "The last packet sent successfully to the server was 0 milliseconds ago."

1. 出错原因

数据库回收了连接, 而系统的缓冲池不知道, 继续使用被回收的连接.

2. 解决方法

方法一. 将MySQL回收空闲连接的时间变长, MySQL默认回收时间是8小时, 可以在MySQL目录下的my.ini中增加下面配置, 将时间改为1天(单位是秒)

[mysqld]
wait_timeout=86400

方法二. 可以通过配置, 让缓冲池去测试连接是否被回收, 如果被回收, 则不继续使用, DBCP添加如下配置

# SQL查询,用来验证从连接池取出的连接
dbcp.validationQuery=SELECT 1
# 指明连接是否被空闲连接回收器(如果有)进行检验,如果检测失败,则连接将被从池中去除
dbcp.testWhileIdle=true
# 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小
dbcp.timeBetweenEvictionRunsMillis=300000
# 在每次空闲连接回收器线程(如果有)运行时检查的连接数量,最好和maxActive一致
dbcp.numTestsPerEvictionRun=50
# 连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位
dbcp.minEvictableIdleTimeMillis=3600000

二. Linux启动Java项目报错: Get local host name failed.java.net.UnknownHostException.

1. 详细错误信息如下

ERROR  - Get local host name failed -com.trs.infra.cluster.ClusterConfig.getMemberHost(ClusterConfig.java:293) 
java.net.UnknownHostException: localhost: localhost
        at java.net.InetAddress.getLocalHost(InetAddress.java:1353) 
        at xxxxxxx 产品异常信息 
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029) 
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862) 
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013) 
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357) 
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823) 
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807) 
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595) 
        at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277) 
        at org.apache.catalina.core.StandardHost.install(StandardHost.java:832) 
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701) 
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432) 
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983) 
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349) 
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091) 
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:789) 
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) 
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478) 
        at org.apache.catalina.core.StandardService.start(StandardService.java:480) 
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313) 
        at org.apache.catalina.startup.Catalina.start(Catalina.java:556) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287) 
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

2. 出错的Java代码

InetAddress localhost = InetAddress.getLocalHost();

3. 分析问题

ping 127.0.0.1 可以ping通
ping localhost 不通
说明是主机映射的原因

4. 解决方法

在Linux的/etc/hosts文件最后一行加入如下代码

127.0.0.1 www.paulandcode.com localhost

第一部份: 网络IP地址
第二部份: 主机名或域名
第三部份: 主机名别名

三. Java, Kettle, Jenkins等第三方插件执行Linux的sudo命令时报错: sudo: no tty present and no askpass program specified

1. 这是因为非root账号执行sudo时需要密码, 可以设置免密码.

2. 进入到root用户下

3. 给/etc/sudoers文件添加写权限

chmod u+w /etc/sudoers

4. 添加免密码

abc ALL = NOPASSWD: ALL

四. 阿里云的Linux报错: sudo: unable to resolve host [hostname]

1. 执行sudo vim /etc/hosts编辑原文件如下

127.0.0.1       localhost

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

2. 在第一行下面添加如下代码

127.0.0.1   [hostname]

3. 如果觉得主机名太长, 可以在/etc/hostname里面修改, 重启后生效.

五. Kettle报错: Unexpected problem reading shared objects from XML file:null

1. 原因

将数据库链接进行了共享, 然后删除共享. 再次保存转换时报错.
或者DB连接为中文, 也会报这个错误.

2. 解决

在C:/Administrator/.kettle文件夹下, 找到share.xml, 在文件中找到sharedobjects节点, 将想要删除的共享对应的子节点删除.

六. ORA-01810: 格式代码出现两次

1. 错误原因

Oracle中格式化时间时出错(分钟不能用java中的mm), 出错Sql代码:

TO_DATE('2011-09-24 00:00:00','YYYY-MM-DD HH:mm:ss')

2. 正确的Sql如下:

TO_DATE('2011-09-01 00:00:00','YYYY-MM-DD HH24:MI:SS')

七. Java报错: SEVERE: Unable to process Jar entry [......]for annotations java.io.EOFException

可能原因:

1. jar包损坏, 需删掉jar包重新下载

2. Tomcat版本, 遇到过的情况: 使用8.0.9版本Tomcat启动报这个错, 改成8.0.22版本就不报错了.

3. 一个Tomcat中部署了两个同样的项目,一个war,一个由该war解压的文件夹,删掉一个即可

八. Tomcat启动报错: Unsupported major.minor version 52.0

1. 错误原因

不支持JDK1.8, 在编译时使用的时JDK1.8, 而运行时使用的JDK版本低于1.8

2. 解决方案

指定Tomcat运行时JDK版本(若不指定, 会使用默认版本)
在Tomcat安装目录下的bin目录找到setclasspath.bat这个文件, 编辑文件, 在第一行加入如下代码

set JAVA_HOME=D:\Program Files\Java\jdk8\jdk1.8.0_51
set JRE_HOME=D:\Program Files\Java\jdk8\jre8

九. 启动Tomcat报错: IllegalArgumentException: The main resource set specified ... is not valid

1. 错误信息

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@19d5011c]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4868)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5003)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more
Caused by: java.lang.IllegalArgumentException: The main resource set specified [D:\Users\chengyq\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\spring] is not valid
    at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:748)
    at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 9 more

2. 错误原因

之前创建了一个名为spring的项目,已经删除, 但是server中还有这个项目。现在运行其他项目,报错找不到已经删除的项目。

3. 解决方法

(1) 找到如下路径: workspacemetadatapluginsorg.eclipse.wst.server.coretmp0conf, 将其中已删除项目对应的标签删除。

(2) 删除Eclipse左侧Servers中对应的Server.xml文件中多余的配标签

十. Arrays.asList返回的List无法直接使用add()方法, Java报错: java.lang.UnsupportedOperationException

1. 报错代码

String[] array = {"1","2","3","4","5"};
List<String> list = Arrays.asList(array);
list.add("6");

2. 报错信息

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.paulandcode.test.ListTest.main(ListTest.java:11)
    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)

3. 错误分析

调用了Arrays.asList()生产的List的add、remove方法时报异常, 这是由Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList. Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList, remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作. java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新, 所以会抛出异常.

4. 解决错误

String[] array = {"1","2","3","4","5"};
List<String> list = Arrays.asList(array);
List<String> arrList = new ArrayList<String>(list);
arrList.add("6");
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
图形学
每天分享5款软件,让大家工作学习更顺心
快乐不是在于拥有什么,而在于我们和别人分享什么。每天分享五款工具,让大家工作办公更顺心就是我最大的快乐。
22 0
|
2月前
|
测试技术 BI
如何做好测试工作
如何做好测试工作
|
4月前
分享5款工作和学习中,经常用到的软件
如今,工作和学习都离不开电脑,所以电脑里的软件自然也是必不可少的,但是电脑软件那么多,不可能每个都装上吧,所以我们要装好用的、实用的,下面给大家分享5款好用到爆的软件,很多懂电脑的人都在用。
31 0
|
7月前
|
人工智能 运维 监控
在日常开发工作中,日志数据该如何利用?
在日常开发工作中,日志数据是一个宝贵的资源,它可以提供关于应用程序运行状态、错误报告、性能指标和用户行为等方面的重要信息。正确地利用和分析日志数据可以帮助开发人员更好地理解应用程序的运行情况,快速定位和解决问题,改进应用程序的性能,并为业务决策提供有力支持。尤其是在现代科技发展的背景下,日志数据作为一种重要的信息资源,对于运维工作具有极大的价值。然而,如何充分利用日志数据,并将其应用于运维和开发工作中,仍然是许多企业和运维和开发人员关注的问题。那么本文就来分享一下在日常开发中关于日志数据的利用方面的探讨。
127 1
在日常开发工作中,日志数据该如何利用?
|
11月前
|
存储 安全 搜索推荐
详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼
详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼
|
测试技术
软件测试培训可靠吗?通过培训出来能找到工作吗?
随着科技的进步,大家对软件的品质以及体验都有了更高的要求,而刚好软件测试工作,就是软件研发过程中重要的一环,没有经过测试的软件就投入使用,质量无法得到保证,所以为了保证软件的质量,越来越多的公司专门设立软件测试部门来对软件质量进行严格把关。也使得整个IT行业对软件测试人才的需求与日俱增。
134 0
|
前端开发
前端学习案例-一文带你理解如何解决工作中的需求
前端学习案例-一文带你理解如何解决工作中的需求
49 0
|
安全 测试技术 Linux
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 1 【部署到服务器】
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 1 【部署到服务器】
【实测】用土话让你明白如何做测试平台的持续部署和集成 - 1 【部署到服务器】
|
存储 运维 Linux
DO447利用推荐做法进行开发--实施建议实践
DO447利用推荐做法进行开发--实施建议实践
136 0
DO447利用推荐做法进行开发--实施建议实践
|
Java 测试技术 Android开发
让测试工作为项目运行保驾护航 | 带你学《Java面向对象编程》之一百
本节为大家介绍了用例测试工具JUnit,并详细介绍了JUnit组件包的导入方法以及编写JUnit程序测试类进行项目测试。
 让测试工作为项目运行保驾护航 | 带你学《Java面向对象编程》之一百