日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java持久性与安全性_Java持久性锁定初学者指南

發(fā)布時(shí)間:2023/12/3 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java持久性与安全性_Java持久性锁定初学者指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java持久性與安全性

隱式鎖定

在并發(fā)理論中,鎖定用于保護(hù)可變共享數(shù)據(jù)免受危險(xiǎn)數(shù)據(jù)完整性異常的影響。 因?yàn)殒i管理是一個(gè)非常復(fù)雜的問(wèn)題,所以大多數(shù)應(yīng)用程序都依賴于其數(shù)據(jù)提供程序隱式鎖技術(shù)。

將整個(gè)鎖定職責(zé)委托給數(shù)據(jù)庫(kù)系統(tǒng)既可以簡(jiǎn)化應(yīng)用程序開(kāi)發(fā),又可以防止諸如死鎖之類的并發(fā)問(wèn)題。 死鎖仍然可能發(fā)生,但是數(shù)據(jù)庫(kù)可以檢測(cè)并采取安全措施(任意釋放兩個(gè)競(jìng)爭(zhēng)鎖之一)。

物理鎖

大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)使用共享(讀取)和排他(寫(xiě)入)鎖,這歸因于特定的鎖定元素(行,表)。 盡管SQL標(biāo)準(zhǔn)要求物理鎖定,但是悲觀的方法可能會(huì)阻礙可伸縮性。

現(xiàn)代數(shù)據(jù)庫(kù)已實(shí)現(xiàn)了輕量級(jí)鎖定技術(shù),例如多版本并發(fā)控制 。

隱式數(shù)據(jù)庫(kù)鎖定隱藏在事務(wù)隔離級(jí)別配置的后面。 每個(gè)隔離級(jí)別都帶有預(yù)定義的鎖定方案,旨在防止某些數(shù)據(jù)完整性異常集。

READ COMMITTED對(duì)當(dāng)前事務(wù)修改的數(shù)據(jù)使用查詢級(jí)共享鎖和排他鎖。 REPEATABLE READ和SERIALIZABLE在讀取時(shí)使用事務(wù)級(jí)共享鎖,在寫(xiě)入時(shí)使用互斥鎖。

邏輯鎖

如果數(shù)據(jù)庫(kù)鎖定足以用于批處理系統(tǒng),則多請(qǐng)求Web流將跨越多個(gè)數(shù)據(jù)庫(kù)事務(wù)。 對(duì)于長(zhǎng)時(shí)間的對(duì)話 ,邏輯(樂(lè)觀)鎖定機(jī)制更為合適。

與對(duì)話級(jí)別的可重復(fù)讀取存儲(chǔ)結(jié)合使用 ,樂(lè)觀鎖定可以確保數(shù)據(jù)完整性,而無(wú)需犧牲可伸縮性。

JPA支持開(kāi)放式鎖定和持久性上下文可重復(fù)讀取,使其非常適合實(shí)現(xiàn)邏輯事務(wù)。

顯式鎖定

雖然對(duì)于大多數(shù)應(yīng)用程序并發(fā)控制要求,隱式鎖定可能是最佳選擇,但有時(shí)您可能需要更細(xì)粒度的鎖定策略。

大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)都支持查詢時(shí)排他鎖定指令,例如SELECT FOR UPDATE或SELECT FOR SHARE 。 因此,我們可以使用較低級(jí)別的默認(rèn)隔離級(jí)別(READ COMMITTED),同時(shí)為特定事務(wù)方案請(qǐng)求共享或排他鎖。

大多數(shù)樂(lè)觀鎖定實(shí)現(xiàn)只驗(yàn)證修改后的數(shù)據(jù),但是JPA也允許顯式樂(lè)觀鎖定。

JPA鎖定

作為數(shù)據(jù)庫(kù)抽象層,JPA可以從基礎(chǔ)RDBMS提供的隱式鎖定機(jī)制中受益。 對(duì)于邏輯鎖定,JPA還提供了可選的自動(dòng)實(shí)體版本控制機(jī)制。

JPA支持以下操作的顯式鎖定:

  • 尋找一個(gè)實(shí)體
  • 鎖定現(xiàn)有的持久性上下文實(shí)體
  • 刷新實(shí)體
  • 查詢通過(guò)JPQL,標(biāo)準(zhǔn)或本機(jī)查詢

顯式鎖類型

LockModeType包含以下樂(lè)觀和悲觀鎖定模式:

鎖定模式類型 描述
沒(méi)有 在沒(méi)有顯式鎖定的情況下,應(yīng)用程序?qū)⑹褂秒[式鎖定(樂(lè)觀或悲觀)
樂(lè)觀的 始終在事務(wù)提交時(shí)發(fā)出版本檢查,因此確保樂(lè)觀鎖定可重復(fù)讀取。
與OPTIMISTIC相同。
OPTIMISTIC_FORCE_INCREMENT 始終增加實(shí)體版本(即使實(shí)體不變),并在事務(wù)提交時(shí)發(fā)出版本檢查,從而確保樂(lè)觀鎖定可重復(fù)讀取。
寫(xiě) 與OPTIMISTIC_FORCE_INCREMENT相同。
PESSIMISTIC_READ 獲取共享鎖以防止任何其他事務(wù)獲取PESSIMISTIC_WRITE鎖。
PESSIMISTIC_WRITE 獲取排他鎖以防止任何其他事務(wù)獲取PESSIMISTIC_READ或PESSIMISTIC_WRITE鎖。
PESSIMISTIC_FORCE_INCREMENT 獲取數(shù)據(jù)庫(kù)鎖以防止任何其他事務(wù)獲取PESSIMISTIC_READ或PESSIMISTIC_WRITE鎖,并且在提交事務(wù)時(shí)會(huì)增加實(shí)體版本。

鎖定范圍和超時(shí)

JPA 2.0定義了javax.persistence.lock.scope屬性,采用以下值之一:

  • NORMAL由于對(duì)象圖可以跨越多個(gè)表,因此顯式的鎖定請(qǐng)求可能會(huì)傳播到多個(gè)表(例如,聯(lián)接繼承,輔助表)。由于整個(gè)實(shí)體關(guān)聯(lián)的行都被鎖定,因此多對(duì)一和一對(duì)-一對(duì)一的外鍵也將被鎖定,但不會(huì)鎖定另一側(cè)父級(jí)關(guān)聯(lián)。 此范圍不會(huì)傳播到子級(jí)集合。
  • 擴(kuò)展顯式鎖將傳播到元素集合和聯(lián)結(jié)表 ,但不會(huì)鎖定實(shí)際的子實(shí)體。 該鎖僅在防止幻像讀取或更改實(shí)際的子實(shí)體狀態(tài)的同時(shí)用于防止刪除現(xiàn)有的子實(shí)體。

JPA 2.0還引入了javax.persistence.lock.timeout屬性,使我們能夠配置鎖定請(qǐng)求在引發(fā)PessimisticLockException之前將等待的時(shí)間(毫秒)。

Hibernate鎖定

Hibernate支持所有JPA鎖定模式和一些其他特定的鎖定選項(xiàng)。 與JPA一樣,可以為以下操作配置顯式鎖定:

  • 使用各種LockOptions設(shè)置鎖定實(shí)體。
  • 得到一個(gè)實(shí)體
  • 加載實(shí)體
  • 刷新實(shí)體
  • 創(chuàng)建實(shí)體或本機(jī)查詢
  • 創(chuàng)建條件查詢

LockModeConverter負(fù)責(zé)映射JPA和Hibernate鎖定模式,如下所示:

Hibernate鎖定模式 JPA LockModeType
沒(méi)有 沒(méi)有
樂(lè)觀的
樂(lè)觀的
OPTIMISTIC_FORCE_INCREMENT
寫(xiě)
OPTIMISTIC_FORCE_INCREMENT
PESSIMISTIC_READ PESSIMISTIC_READ
PESSIMISTIC_WRITE


升級(jí)

UPGRADE_NOWAIT UPGRADE_SKIPLOCKED
PESSIMISTIC_WRITE
PESSIMISTIC_FORCE_INCREMENT



PESSIMISTIC_FORCE_INCREMENT

不建議使用UPGRADE和FORCE鎖定模式,而推薦使用PESSIMISTIC_WRITE 。

UPGRADE_NOWAIT和UPGRADE_SKIPLOCKED分別使用Oracle風(fēng)格的select用于更新nowait或select用于更新跳過(guò)鎖定語(yǔ)法。

鎖定范圍和超時(shí)

Hibernate還定義了作用域和超時(shí)鎖定選項(xiàng) :

  • 范圍
    鎖定范圍允許顯式鎖定級(jí)聯(lián)到所擁有的關(guān)聯(lián) 。
  • 超時(shí)
    超時(shí)間隔可能會(huì)阻止鎖定請(qǐng)求無(wú)限期地等待。

在我的下一篇文章中,我將介紹不同的顯式鎖定設(shè)計(jì)樣式,敬請(qǐng)期待!

翻譯自: https://www.javacodegeeks.com/2015/01/a-beginners-guide-to-java-persistence-locking.html

java持久性與安全性

總結(jié)

以上是生活随笔為你收集整理的java持久性与安全性_Java持久性锁定初学者指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。