开发经验(一)

最近开发一个小系统,遇到了一下点自己没有处理好,在这里记录下来。

  • 第一个就是在设计系统的时候先提供一个业务接口A,在提供一个查询接口B。接口B的功能是查询接口A的执行结果的。开始的设计中当其他系统在调用A接口的时候会返回我自己平台的流水,然后凭此流水来调用B接口。可是这样会有一个问题,就是我自己平台在在返回信息的时候网络出现异常了,调用方收不到我返回的信息,就没法查询了,只能再调用一次A接口。这样其实不好的。应该让调用方在调用A接口的时候将他们平台的流水上送过来,然后凭调用方平台流水来查询。这样就算出现上面情况也能查询,类似于银联接口、人行接口、政通连连等都是如此。使用第二种情况需要我自己这边判断一下调用方流水重复性,这里会有并发问题,可以通过数据库的唯一性索引处理,让它报错。当然可以用redis或者直接在查询的Java 方法上加锁。
  • 在实体类上有统计字段,比如某一个实体类上有总次数,成功率,平均耗时等字段。这些字段按理说应该是从流水表里查询出来的。但是我当时用的 jpa ,这种查询不好处理,所以我把这些信息定义在了实体中,然后每调一次业务就做一次更新操作,但是这样在一个tomcat线程中数据库操作会比较多比较耗时,然后在代码中用单独一个线程池来处理这样tomcat线程可以立即释放。但是这样处理还有一个问题就是并发的时候多个线程来更新数据库同一条记录。这样的话就只能在Java方法上加同步锁了,因为如果使用数据库事务的隔离级别,我担心查询实体方法也会被阻塞,而查询实体方法是在tomcat线程中的。可就算是这样处理了,在多机的情况下依然会有问题。因为Java加锁只在一个jvm里面有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值