首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

现学现卖

前两天,一个已经开发完提交测试的应用程序被甲方测试出一个问题,在多客户端提交订单的时候,报了Datebase is locked.的一个错误。甲方后台的技术选型是SpringMVC + Hibernate + SQLite3。收到障碍消息的那一刻,心里咯噔一下(多年对日项目做出来的毛病,技术方面造诣不高,凡事技术方面出问题,难免心里会有点紧张),赶忙微信给手下两小弟,看看他们是否能第一时间解决(人在外面,身边没环境),同时自己也开启双核大脑,仔细寻思解决思路。

技术出问题,无外乎上网搜索是否有同样的案例,内事不决问百度,外事不决问谷歌。还好,这个问题百度上有,简单描述一下,就是SQLite只支持库级锁。库级锁意味着什么?同时只能允许一个写操作胸中顿时一万头羊驼奔驰而过,都已经进入这个阶段了,居然还有这种错误。。。但转念一想,一个邪恶的想法油然而生

下午回到公司,两小弟拉过来一问,果不其然,一问到这个问题两人均一脸迷茫,完全没有解决问题的思路(再次证明了,想专精技术的别做外包,最多两年就该滚蛋外面去闯荡了,否则,耽误自己的前程。)。没办法,关键性问题还得自己来解决了。这里提到一个概念,碰到这种问题的,第一个反应应该是在写入的时候加个锁,保证DB文件被唯一操作就行了(他们两连这概念都没有,哭晕在厕所,虽然我也不太会用,但基本概念还是有的),但涉及的改修范围比较广,这时AOP就闪亮登场了。

什么是AOP呢?百度百科给的定义是:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

要是放在半年前,碰上这种问题我估计也解不出来,幸好,进现在这个项目的时候和原项目架构混得不错,他退出项目后推荐我接手他的工作,并给予我很多指点(虽说他年龄比我小,然三人行必有我师),使我在最近半年中功力有很大的提升。其中就有提到AOP的概念,虽然没有细说,但他一提我就明白这可是个好东西。在不破坏现有机能的同时,还能完成大家都所需要完成的事情,大赞。

解决思路如图:

我在访问数据库的DAO层用AOP技术拦截了一道,然后在里面加了个锁,改完后,照例扔给两小弟去测试一下,没问题后就直接把这个障碍给结束了。

总结一下,这次的改修我仍然觉得实现得不是很好,尚有优化的空间。至少,读写我没有分离开而是一股脑的都锁住了。但行业特色,需要我快速解决这个问题(同时在做公司的两个项目,这个项目可以说是副业,主要工作精力不在这个项目上),而且应用场景涉及到写数据库的只有个位数的设备+一个定时器,效率要求不是很高,所以也就先将就一下了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180524G0SVUQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券