最近程序媛小白在开发中遇到的一些低级错误,但为了避免同样的错误再次出现,还是记录下来
- 第一 日期格式化问题
yyyy年MM月dd日 写成了大写的 YYYY,转换会出现意想不到的日期!!
2 file.delete()并未释放磁盘空间
java代码里处理文件删除后,linux服务器上的磁盘空间并没有真的释放,
为什么呢?文件句柄依然在?怎么彻底释放空间呢?
(1)背景:小白在处理导出数据时发现一般一个txt 有8G,这么跑下去磁盘早晚会爆,想着把txt压缩成zip文件后,把源文件txt删除,会不会空间会小一些,因为zip后也有差不多1G左右,但zip后源文件txt已经删除后磁盘空间依然不释放(因为晚上22点收到了磁盘告警>80%),100G的磁盘空间,使用了81G,但du -sh * 看数据文件已经不大了,找不到是哪儿占用的!最后通过分析剩下要跑的数据不到2G,剩下的20G足够;先睡觉第二天换个脑子,但疑问还是未解开,那81G是怎么回事??!
第二天早早到了公司心想数据都跑完了,要不重启下服务看下是否会释放磁盘空间,果然重启后磁盘占用率变成1%,直觉有时是最简单有效的呢,但也需要谨慎,能否重启是因为它是一个跑数据的java进程,不涉及生产服务所以敢重启呢。
看来释放java进程删除文件未释放的空间,最简单粗暴的办法是重启java进程,有没有其他一劳永逸的方法呢?总不能程序跑着还得有人盯着磁盘满不满?那也太...
网上提供了一个方法说先把文件清空,然后再删除,先用这个笨方法
3 数据库时区问题
其实数据库时区是SYSTEM,并没有问题,是代码里的日期转换类设置的时区是UTC,导致写入数据库的时间+8小时!
假如数据库时区不是当地时区,可以通过在jdbc连接上加上serverTimeZone=Asia/Shanghai来设置当地时区