2 回答
TA贡献1864条经验 获得超2个赞
嗯——非阻塞数据库 IO 在 Java/JDBC 世界中以标准方式是不可能的。简而言之——你的 Spring 数据存储库最终将使用 JPA ORM 实现(比如 Hibernate),而 JPA ORM 实现又将使用 JDBC 与之交互本质上是阻塞的数据库。Oracle(异步数据库访问 API )目前正在做这方面的工作,以提供与 JDBC 类似但非阻塞的 API。他们打算将此作为标准提出。Spring 人员在这方面也有一项令人兴奋的并行工作,即R2DBC – 反应式关系数据库连接。他们实际上也将其与 Spring 数据集成(链接) 这样可以帮助您集成到您的解决方案中。可以在此处找到 Spring 的一个很好的教程。
TA贡献1829条经验 获得超7个赞
我建议使用单独的JTA 事务写入数据库。这样做,定义一个像这样的方法
@Transactional(Transactional.TxType.REQUIRES_NEW)
public void saveJobStart(final long someJobId) {
SomeJob someJob = mSomeJobRepository.findOne(someJobId);
someJob.setJobStarted(Instant.now());
mSomeJobRepository.saveAndFlush(someJob);
}
当然不完全一样。如果doActualjob()失败,在您的情况下,数据库将不会保留开始日期。在我的提议中,它会坚持下去。作为补偿,您需要在新事务中删除doSlowJobcatch中的bloc 中的开始日期,然后重新处理异常。 throw
添加回答
举报