2 回答

TA貢獻1864條經驗 獲得超2個贊
嗯——非阻塞數據庫 IO 在 Java/JDBC 世界中以標準方式是不可能的。簡而言之——你的 Spring 數據存儲庫最終將使用 JPA ORM 實現(比如 Hibernate),而 JPA ORM 實現又將使用 JDBC 與之交互本質上是阻塞的數據庫。Oracle(異步數據庫訪問 API )目前正在做這方面的工作,以提供與 JDBC 類似但非阻塞的 API。他們打算將此作為標準提出。Spring 人員在這方面也有一項令人興奮的并行工作,即R2DBC – 反應式關系數據庫連接。他們實際上也將其與 Spring 數據集成(鏈接) 這樣可以幫助您集成到您的解決方案中??梢栽?a >此處找到 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
添加回答
舉報