如下代码:
@Service
public class XxxService{
@Transactional(rollbackFor = Throwable.class)
public void save(XxxEntity entity){
httpClientPullOrQuery(url1, entigy.getId());
int r = save(entity);
httpClientPush(url2, entity);
}
}
可以看到首先Http方式拉取数据,然后存储数据入库,最后通过Http方式上报数据。
由此你也看出问题了,Http比较耗时,导致数据库connection的时间会很长,数据库连接就一直占用。
解决方案:
@Autowired
private TransactionTemplate transactionTemplate;
...
@Service
public class XxxService{
public void save(XxxEntity entity){
httpClientPullOrQuery(url1, entity.getId());
transactionTemplate.execute(new TransactionCallback<Integer>() {
@Override
public Integer doInTransaction(TransactionStatus status) {
return save(tvTag);
}
});
httpClientPush(url2, entity);
}
}
当然,也有其它方案,你选择符合情况的就行!