Spring Boot Application中的我的服務方法被多個線程訪問,一個線程正在修改數據庫中的數據。在Spring JPA Repository中讀取未被取消的數據
當其他線程在第一次提交之前訪問數據時,它不會獲得早期線程的數據庫更新。
我已經使用了以下注釋到相關的方法後長時間搜索stackoverflow。
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED)
public void accept(Event<String> event) {}
但是無法達到理想的效果。未提交的更改不會在第二個線程中檢索。
請幫我解決這個問題。
我已經使用實體管理器flush()方法,但它不成功。
數據庫支持哪些隔離級別?更重要的是,爲什麼你想要另一個線程讀取未提交的數據?豈不是更好呢? – takteek
如果您需要訪問由第一個線程修改的數據,那麼您的事務依賴於彼此。 「READ UNCOMMITTED」不是解決這個問題的方法。你正在寫/讀什麼樣的數據,爲什麼你需要在提交之前訪問它? – Kayaman
其實在第一個線程上,我對數據庫中的特定數據進行了鎖定。所以當它被一個線程訪問時,它不應該被其他人訪問。在我的方法中,首先獲取解鎖的數據併爲其鎖定並提交給數據庫。所以其他線程不應該選擇這些條目。但不幸的是,他們選擇相同的條目,因爲他們還沒有提交給數據庫。 – user3011958