说明
近期,工作中、工作外、个人、他人均遇到了不少问题,而这些问题的成因均因未注意细节而造成,使我再一次想起那句名言:细节决定成败。于是我觉得很有必要做一个记录,用以自警和他警。
事件一:一个数据库预留字段造成的上线失败
这个事其实是比较严重的一个事,因为涉及到了生产,并严重影响甲方公司对我方的评价。
整个经过大概是这样:
甲方公司给我们公司提出了一个需求,这个需求是六月份开始建立工单的,而实际开发应该是五月份就已经开始。
这个任务不是我负责,因此我并不了解细节详情,只是听经理说并不是很难的一个任务,当然了,也可能只是他认为不难。
结果,这个任务直到十一月份才正式上线,持续了近半年。而持续了近半年才上线,结果还是以上线失败告终,目前又被打回重新开发。
这些其实不是最重要的,最重要的问题是上线失败的原因,是因为新开发的功能使用了原来数据库的三个预留字段之一。
也不清楚究竟是什么原因,导致上线后才发现那个预留字段已经有其他业务在使用了,导致最终上线失败。
仅仅是一个字段是否被使用的问题,未在上线前确认好,导致五个月的成果几乎功亏一篑,这件事直接造成甲方公司对我方的评价大打折扣,是为细节决定成败的事件1。
事件二:一个空格耽误的半天时间
这个问题其实不止遇到过一次,相信也不止我一个人遇到过,那就是开发过程中配置文件里的空格。
因为这次的项目开发要把sybase数据库改为oracle数据库,oracle又不是很好安装,所以一开始我是没有在本机安装oralce的,直接使用公司服务器的oracle开发。
代码基本开发完毕的时候,我抽空在自己电脑上安装了oracle,各种测试都没有问题后,正式使用代码连接我自己的数据库。
结果呢,运行过程中始终提示用户验证不通过。
我查了用户名和密码,怎么看都是对的,一开始以为还是数据库服务器哪里配置有问题,但是各种验证之后又最终确定数据库服务器是没有问题的。
如此头疼的花了半天时间后,我无言以对的发现,竟然是配置文件中用户名末尾多了个看不出来的空格,就是这个罪魁祸首,使我几乎抓狂,又做了若干的无用功,是为细节决定成败的事件2。
事件三:一个博客中的细节遗漏导致自己差点怀疑自己
一年多之前,我有写过activiti自定义流程的系列博客,如今我已经很久没有再用这个技术了,但是有很多用这个技术的同学还在参考我写的那些笔记。
但是最近有个同学遇到了一个问题,他按照我说的方法,甚至完全使用我的代码后,有个环节始终得不到正确结果。
当他问我的时候,我一开始抱着“我怎么会错”的、据说是标准程序员心态的心态,坚定的认为一定是他写的有问题。
然而,当我自己按自己的代码再来一遍时,竟然得到了和他一样的结果,那个环节也不正确。
后来我有别的事就暂停了找问题,而那个同学因为必须解决这问题,就一直找了下去。
最终还是他发现其实我写的没有问题,方法和代码都没有问题,问题在于画流程图的时候一些细节没有注意。
那些画流程图的细节我并没有在博客中说明,导致别人不知道这个细节,连我自己也都忘记,还以为自己写的有错误,是为细节决定成败的事件3。
具体那篇博客参考http://blog.csdn.net/tuzongxun/article/details/51154101
事件四:一个扫描路径定义耽误的几个人的几个小时
这次项目spring+struts2+mybatis重构为springboot+jpa,由于过往不规范的开发经验,导致写的代码问题很多,也不规范。
在确定整体业务流程正确之后,我们进行了一轮重构,主要是根据阿里新发布的java开发规范进行一些优化。
在这个优化过程中,我修改了一个数据库对应的实体类的包名,然后启动项目之后就无论如何也扫描不到那些实体类了。
然后我查看了springboot项目的目录结构,所有包都位于启动类同级或者同级的下级,按理说默认都会扫描到才对。
然后又查看了各个实体类的注解,该有的和jpa对应的注解也都不少。
然后又看了springboot的启动类,也都配置了包扫描路径,确定没有问题。
于是我实在找不到问题出在哪里,遂请教了两个对springboot更熟悉的同事,结果他们帮忙也找了很久,很久之后依然没有解决问题。
就这样,最终是另一个一起开发的同事找出了问题,原来是他写的某个切换数据源的方法中定义了实体类扫描路径,导致更换了包名之后的包名和他之前那个定义的字符串不匹配。
正常来说,这种字符串不应该是写在方法中的,不规范的细节,导致几个人几个小时的流失,并且最终发现都是无用功,是为细节决定成败事件4。
事件五:一个包名写错导致的诡异问题
这次的项目大重构,分为三个子模块,由于每个模块负责人不一样,又没有统一的具体规范要求,导致风格迥异。
其中一个同事创建的springboot项目就比较个性,首先是他的springboot项目看起来是maven创建,但是别人拿过来放入eclipse后,均需要先转成maven项目才能成为真正的maven项目。
其次就是在eclipse中正常运行,结果在打成jar包时,jar包里什么配置文件都没有,导致jar包无法以预期的结果运行。
后来找来公司的高手一番查找后,发现打包命令没有问题,各种配置也正常。
没把配置文件打进jar包的原因,是因为maven配置文件默认目录src/main/resources,他写成了src/main/resouces,单词resources中少了一个r。
这很显然是手动创建项目目录,导致手误,少写了字符,先不说这种方式如何,单单就事论事,一个字符缺失导致这样的诡异问题,是为细节决定成败事件5。
以上事件,除开第一个之外,其他看起来似乎也都不算太大的事,但是这样的事频繁的发生,就不得不引起重视。
细节决定成败,态度决定人生,希望以此自警和他警!