kettle作业在运行一段时间后会报错,原因是mysql会默认每8小时回收一次无用连接。
错误日志如下:
Communications link failure with MySQL
he last packet successfully received from the server was 1,290,343 milliseconds ago. The last packet sent successfully to the server was 1,290,448 milliseconds ago.
然后你的作业就失败了,必须重新启动kettle才能解决。
经过多次排查,最终解决。
无效解决方案
jdbc:mysql://127.0.0.1:3306/kettle?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
加上 autoReconnect=true 参数
外部解决方案
虽然能解决8小时mysql自动丢弃无用连接的问题,但是不能解决mysql宕机后的自动重连。
1.更改mysql的wait_timeout(默认8小时),改成更长的检测时间,比如1年(在墙内找到的大多数是这种方式)
修改方式,自行百度
2.将kettle的调度周期设置短(在国外的论坛讨论中发现)
例如wait_timeout是8小时,只需把调度周期设为<8小时即可
完美解决方案
在kettle5.4测试不通过,在kettle7测试通过。
配置数据源连接时,采用连接池,配置如下
关于连接池参数,kettle使用的是apache dbcp connetions pool.
修改方式,自行百度