在api调用后进行数据库插入时,并发用户数据库超时问题

时间:2019-03-29 13:35:30

标签: java spring hibernate spring-data

情况是;

我有ServiceA,它在每个请求5000毫秒后以AResponse响应。

我也有ServiceB会调用ServiceA(使api像调用一样)。然后根据AResponse将数据插入db(当前为hsql)中。

我有2个数据库连接池限制。并且30000ms连接超时默认为。我不想更改这些值。

因此,当尝试同时调用100个用户时,请使用serviceB.getAndSave()方法。它给用户30秒后超时。

// ServiceA method of getting response
public AResponse getData(param){
  try {
          Thread.sleep(5000);
          return new AResponse("SUCCESS");
      } catch (InterruptedException e) {
          e.printStackTrace();
          return null;
      }
}
// ServiceB class has annotation @Transactional
// In ServiceB inserts data to db depends on serviceA's AResponse.
public getAndSave(){
    AResponse aresponse = serviceA.getData(param);
    MyData myData = new MyData(aresponse)
    myRepository.save(myData);
}

那么,在没有脏数据的情况下如何处理这种情况并解决超时陷阱。顺便说一下,我所有的数据都必须正确保存。

0 个答案:

没有答案