我遇到一个问题,在使用 JpaRepository 写入数据库后,我需要在单独的线程上执行几个慢速 HTTP 请求。问题是doActualJob()在等待一系列期货解决时的阻塞。这似乎可以防止底层 Hibernate 会话关闭,从而导致应用程序很快用完连接。
如何编写此函数,以便在执行阻塞 I/O 时数据库连接不保持打开状态?甚至可以使用 JpaRepositories,还是我需要使用像 EntityManager/SessionFactory 这样的较低级别的 API?
@Service
class SomeJobRunner {
private final SomeJobRepository mSomeJobRepository; //extends JpaRepository
@AutoWired
public SomeJobRunner(final SomeJobRepository someJobRepository) {
mSomeJobRepository = someJobRepository;
}
@Async
public void doSlowJob(final long someJobId) {
SomeJob someJob = mSomeJobRepository.findOne(someJobId);
someJob.setJobStarted(Instant.now());
mSomeJobRepository.saveAndFlush(someJob);
doActualjob(); // Synchronous job doing several requests using Unirest in series
someJob = mSomeJobRepository.findOne(someJobId);
someJob.setJobEnded(Instant.now());
mSomeJobRepository.saveAndFlush(someJob);
}
慕斯王
吃鸡游戏
相关分类