最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成Seata的全過(guò)程

 更新時(shí)間:2024年11月04日 14:47:50   作者:高高要努力  
本文介紹了事務(wù)的四大特性(原子性、一致性、隔離性、持久性)以及本地事務(wù)和分布式事務(wù)的概念,本地事務(wù)是指在單個(gè)數(shù)據(jù)庫(kù)級(jí)別的事務(wù)管理,而分布式事務(wù)則是跨多個(gè)數(shù)據(jù)庫(kù)或服務(wù)的事務(wù)管理,感興趣的朋友一起看看吧

1.本地事務(wù)和分布式事務(wù)概念

事務(wù)四大特性

  • 原子性:事務(wù)不可再分
  • 一致性:數(shù)據(jù)改變前后,總量必須一致
  • 隔離性:事務(wù)之間相互隔離,互不干擾
  • 持久性:事務(wù)一旦提交,數(shù)據(jù)就會(huì)持久化到磁盤,不能回滾

本地事務(wù):所有的事務(wù)都是基于數(shù)據(jù)庫(kù)的,那么我們?cè)诖a中加@Transactional其實(shí)是使用的數(shù)據(jù)庫(kù)的Begin/Commit/Rollback,底層使用的是動(dòng)態(tài)代理。本地事務(wù)只能管理到當(dāng)前服務(wù)連接的那個(gè)數(shù)據(jù)庫(kù)的事務(wù),如果一個(gè)事務(wù)中操作了多個(gè)數(shù)據(jù)庫(kù)在回顧的時(shí)候只能回滾當(dāng)前服務(wù)連接的那個(gè)數(shù)據(jù)庫(kù),沒(méi)辦法回滾其它數(shù)據(jù)庫(kù)

分布式事務(wù):用于解決在一個(gè)方法中操作多個(gè)數(shù)據(jù)庫(kù)的事務(wù),分布式事務(wù)其實(shí)就是將多個(gè)數(shù)據(jù)庫(kù)加入到同一組事務(wù)中,當(dāng)某一個(gè)數(shù)據(jù)庫(kù)發(fā)生異常時(shí)整體回滾

2.分布式事務(wù)的解決方案

2.1 XA協(xié)議

  • 簡(jiǎn)單理解就是XA規(guī)范協(xié)議是一種事務(wù)協(xié)議,通過(guò)這種協(xié)議來(lái)通知數(shù)據(jù)庫(kù)事務(wù)的開(kāi)始、結(jié)束、提交、以及回滾,XA 接口函數(shù)由數(shù)據(jù)庫(kù)廠商提供。XA協(xié)議使用二階段提交來(lái)處理分布式事務(wù),說(shuō)的更明白一點(diǎn)就是XA協(xié)議保證了分布式事務(wù)的原子性,要么都成功,要么都失敗。
  • XA協(xié)議采用兩階段提交方式來(lái)管理分布式事務(wù)

2.2 2PC模式

2PC就是基于XA協(xié)議進(jìn)行實(shí)現(xiàn)的,采用兩階段提交 2PC(Two Phase Commitment Protocol)來(lái)管理分布式事務(wù),所謂二階段是有兩個(gè)階段組成,一階段投票階段和二階段提交階段。同時(shí)它是由“事務(wù)協(xié)調(diào)器”和若干“事務(wù)執(zhí)行者”兩個(gè)角色組成。

第一階段:準(zhǔn)備階段( 投票階段 )

  • 事務(wù)協(xié)調(diào)器向所有事務(wù)參與者發(fā)請(qǐng)求,詢問(wèn)是否可以執(zhí)行提交操作(你們都可以執(zhí)行事務(wù)操作嗎?),并開(kāi)始等待各參與者節(jié)點(diǎn)的響應(yīng)。
  • 事務(wù)參與者收到協(xié)調(diào)者的指令開(kāi)始執(zhí)行事務(wù)操作但是不會(huì)提交事務(wù),同時(shí)寫Undo log(寫操作之前首先將數(shù)據(jù)備份log,如果要回滾就從這個(gè)log進(jìn)行數(shù)據(jù)還原) 和 Redo log(修改數(shù)據(jù)在buffer pool緩沖池中修改,Redo log是對(duì)這個(gè)緩沖池的內(nèi)容做持久,避免修改的數(shù)據(jù)丟失) 。
  • 如果參與者事務(wù)操作都執(zhí)行成功(注意哦,沒(méi)提交事務(wù)哦),那么就會(huì)回復(fù) 事務(wù)協(xié)調(diào)器 “準(zhǔn)備OK” ,如果事務(wù)操作失敗,那么就會(huì)回復(fù)執(zhí)行者“準(zhǔn)備不OK”。

第二階段:提交階段

正常流程

  • 事務(wù)協(xié)調(diào)器會(huì)收到參與者的回復(fù),如果所有的參與者都回復(fù)“準(zhǔn)備ok”,意味著所有的參與者都可以完成事務(wù)操作,那么事務(wù)協(xié)調(diào)器會(huì)向每個(gè)事務(wù)參與者發(fā)送一個(gè)“commit” 提交事務(wù)指令(既然大家都可以進(jìn)行事務(wù)操作,那大家都提交事務(wù)把)
  • 事務(wù)參與者收到指令就開(kāi)始提交事務(wù),然后會(huì)向事務(wù)協(xié)調(diào)器回復(fù)“完成”,事務(wù)協(xié)調(diào)器收到所有參與者都回復(fù)完成,事務(wù)完成

回滾流程

  • 如果再第一階段事務(wù)協(xié)調(diào)器收到了某個(gè)事務(wù)參與者回復(fù)“準(zhǔn)備不ok”即事務(wù)操作執(zhí)行失敗,那么事務(wù)協(xié)調(diào)器會(huì)向所有的事務(wù)參與者發(fā)送“rollback”回滾執(zhí)行(有一個(gè)成員不ok,那大家都散了吧,今天的事情搞不成了)
  • 事務(wù)參與者收到指令,回滾之前的事務(wù)操作,即:將數(shù)據(jù)還原到“Undo log”的數(shù)據(jù),然后向事務(wù)協(xié)調(diào)者回復(fù)“回滾成功”,當(dāng)事務(wù)協(xié)調(diào)器收到所有的參與者回復(fù)“回滾成功”后,取消事務(wù)。

發(fā)送回滾指令

二階段提交的問(wèn)題

  • 二階段能保證分布式事務(wù)的原子性,但是也有一些明顯的缺陷。比如:在第一階段,如果參與者遲遲不回復(fù)協(xié)調(diào)者,就會(huì)造成事務(wù)的阻塞,性能不好。
  • 單節(jié)點(diǎn)故障,如果協(xié)調(diào)器掛了,參與者會(huì)阻塞,比如在第二階段,如果事務(wù)協(xié)調(diào)器宕機(jī),參與者沒(méi)辦法回復(fù)信息,長(zhǎng)時(shí)間處于事務(wù)資源鎖定,造成阻塞(事務(wù)操作是要加鎖的)。
  • 在第二階段,如果在事務(wù)協(xié)調(diào)器發(fā)出"commit"執(zhí)行后宕機(jī),一部和參與者收到了消息提交了事務(wù),而一部分沒(méi)有消息沒(méi)法做出事務(wù)提交操作,這樣就出現(xiàn)了數(shù)據(jù)不一致。
  • 在第二階段,如果事務(wù)事務(wù)協(xié)調(diào)器發(fā)出“commit”指令后宕機(jī),收到“commmit”指令的參與者也宕機(jī)了,那么事務(wù)最終變成了什么效果,提交了還是沒(méi)提交?沒(méi)有誰(shuí)知道。

2.3 3PC模式

三階段提交(Three-phase commit),也叫三階段提交協(xié)議(Three-phase commit protocol),是二階段提交(2PC)的改進(jìn)版本,

3PC在2PC的功能上做了兩個(gè)改動(dòng),一是在協(xié)調(diào)者和事務(wù)參與者之間引入了超時(shí)機(jī)制,在第一階段和第二階段中插入一個(gè)準(zhǔn)備階段 , 保證了在最后提交階段之前各參與節(jié)點(diǎn)的狀態(tài)是一致的,那么現(xiàn)在的三階段分為了:

  • canCommit“詢問(wèn)是否能提交,
  • papreCommit”準(zhǔn)備提交階段 ,
  • doCommit”提交階段。

第一階段“canCommit” :

  • 事務(wù)協(xié)調(diào)者向事務(wù)參與者發(fā)送 canCommit 請(qǐng)求詢問(wèn)是否能提交事務(wù),然后等待所有事務(wù)參與者的返回
  • 事務(wù)參與者接收到事務(wù)些調(diào)整的canCommit指令,然后自身認(rèn)為能夠提交事務(wù)則返回 “yes”否則返回“no”

第二階段“papreCommit”

事務(wù)協(xié)調(diào)者收到所有的事務(wù)參與者的canCmmit指令的反饋結(jié)果,這里有兩種情況,一是所有的反饋都是yes,二是有部分的事 務(wù)參與者返回No,后者反饋超時(shí)。

正常流程

  • 如果事務(wù)協(xié)調(diào)者收到所有的事務(wù)參與者的canCmmit指令反饋結(jié)果都為YES,那么就進(jìn)入papreCommit階段。事務(wù)協(xié)調(diào)者向事務(wù)參與者發(fā)送 “papreCommit”指令。
  • 事務(wù)參與者收到“papreCommit”指令,開(kāi)始進(jìn)行事務(wù)操作,并將undo和redo信息記錄到事務(wù)日志中,如果順利執(zhí)行事務(wù)操作,則反饋ACK確認(rèn)信息,然后等待下一步指令。

中斷事務(wù)

  • 如果事務(wù)協(xié)調(diào)者收到所有的事務(wù)參與者的canCmmit指令反饋結(jié)果出現(xiàn)了NO,或者等待超時(shí),那么就執(zhí)行事務(wù)中斷,向所有的事務(wù)參與者發(fā)送“abort”中斷指令。
  • 事務(wù)參與者接收到“abort”指令,中斷事務(wù),當(dāng)然如果事務(wù)參與者遲遲未收到事務(wù)協(xié)調(diào)者的指令等待超時(shí)也會(huì)中斷事務(wù)。

第三階段“doCommit階段”

這里準(zhǔn)備提交事務(wù)了,這里有兩種情況,如果事務(wù)協(xié)調(diào)者收到所有的事務(wù)參與者的papreCommit指令反饋結(jié)果都是ACK,那么進(jìn)入doCommit階段,否則會(huì)中斷事務(wù)。

正常流程

  • 事務(wù)協(xié)調(diào)者收到所有的事務(wù)參與者的papreCommit指令反饋結(jié)果都是ACK,然后向事務(wù)參與者發(fā)送“doCommit”指令,通知提交事務(wù)。
  • 事務(wù)參與者收到“doCommit”指令,正式執(zhí)行事務(wù)提交,并且釋放所有事務(wù)資源,返回向事務(wù)協(xié)調(diào)者返回事務(wù)結(jié)果狀態(tài)“ACK”完成
  • 事務(wù)協(xié)調(diào)者收到所有的事務(wù)參與者都返回ACK成功,完成事務(wù)。

中斷事務(wù)

  • 事務(wù)協(xié)調(diào)者收到的事務(wù)參與者的papreCommit指令反饋結(jié)果有的不是ACK,那么事務(wù)協(xié)調(diào)者然后向事務(wù)參與者發(fā)送“abort”事務(wù)中斷指密令。
  • 事務(wù)參與者收到“abort”事務(wù)指令,會(huì)根據(jù)unlog日志文件還原數(shù)據(jù),然后釋放事務(wù)資源,然后向事務(wù)協(xié)調(diào)者發(fā)送回滾“ACK”消息
  • 事務(wù)協(xié)調(diào)者收到所有的事務(wù)參與者都返回ACK消息,取消事務(wù)。

2.4 TCC事物補(bǔ)償

TCC(Try Confirm Cancel) 事務(wù)補(bǔ)償機(jī)制,即每一個(gè)操作都要做相應(yīng)的補(bǔ)償機(jī)制,即如何確認(rèn)操作成功,如果操作失敗如何撤銷事務(wù)。它分為三個(gè)階段

  • Try : try的意思是嘗試,其實(shí)這個(gè)步驟是用來(lái)做業(yè)務(wù)的預(yù)處理,可以理解為是做一些準(zhǔn)備工作,等到Confirm之后這些操作才算成功。
  • Confirm :確認(rèn),如果所有的事務(wù)參與者都try成功,執(zhí)行commit對(duì)業(yè)務(wù)做提交操作,或者可以理解成對(duì)try的工作作出確認(rèn)。
  • Cancel:取消,如果try失敗需要回滾,即取消try的預(yù)處理操作

2.5 MQ消息最終一致性

大致流程是:

1.主業(yè)務(wù)方向發(fā)送一個(gè)“Prepared”準(zhǔn)備消息到MQ,這個(gè)消息還未被確認(rèn),不會(huì)發(fā)生給消費(fèi)者,然后MQ向生產(chǎn)者發(fā)送確認(rèn)收到消息,然后主業(yè)務(wù)方執(zhí)行自己的業(yè)務(wù),并提交本地事務(wù),成功后向MQ確認(rèn)之前的“Prepared”消息發(fā)生給消費(fèi)者,如果失敗MQ將當(dāng)前半消息刪除,取消事務(wù)。

2.消息接受者方收到消息后執(zhí)行業(yè)務(wù)邏輯,提交本地事務(wù),然后向MQ返回ACK確認(rèn)消息,如果ACK消息為成功,MQ則刪除當(dāng)前消息;如果消費(fèi)者消息接受失敗或返回ACK是失敗,會(huì)進(jìn)行重試,保證消息最終被消費(fèi)。直到16次后還是失敗,消息會(huì)進(jìn)入死信隊(duì)列,該消息不會(huì)被刪除,也不會(huì)重發(fā),需要人工介入;

RocketMQ的事務(wù)消息:使用MQ的分布式事務(wù)是最終一致性

  • 生成者發(fā)送一個(gè)半事務(wù)消息給MQ,MQ告訴生產(chǎn)者接收到了,此時(shí)生產(chǎn)者方就去執(zhí)行本地事務(wù)
  • 如果執(zhí)行成功那么告訴MQ執(zhí)行Commit,如果本地事務(wù)失敗MQ執(zhí)行Rollback。那么MQ執(zhí)行Commit就是把此消息發(fā)送給消費(fèi)者,消費(fèi)者接收到消息之后執(zhí)行本地事務(wù),如果執(zhí)行成功那么響應(yīng)ACK確認(rèn)成功,如果執(zhí)行失敗那么響應(yīng)ACK失敗,MQ接收到成功刪除此消息,如果失敗那么會(huì)再次發(fā)送,直到16次之后還是失敗那么進(jìn)入到死信隊(duì)列,此時(shí)就需要我們?nèi)斯とz查代碼手動(dòng)發(fā)送消息再次消費(fèi)。如果MQ執(zhí)行Rollback那么就會(huì)把此消息進(jìn)行刪除。
  • 如果避免生產(chǎn)者一直不提交commit或rollback還準(zhǔn)備了一個(gè)回查機(jī)制,調(diào)用我們寫的一個(gè)方法,在方法中去檢查生產(chǎn)者的本地事務(wù)是否執(zhí)行成功,如果成功提交commit,如果失敗提交rollback

2.6 Seata框架

seata(Simple Extensible Autonomous Transaction Architecture) 是 阿里巴巴開(kāi)源的分布式事務(wù)中間件,致力于提供高性能,零入侵和簡(jiǎn)單易用的分布式事務(wù)服務(wù)。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案。

Seata 的設(shè)計(jì)思路是將一個(gè)分布式事務(wù)可以理解成一個(gè)全局事務(wù),下面掛了若干個(gè)分支事務(wù),而一個(gè)分支事務(wù)是一個(gè)滿足 ACID 的本地事務(wù),因此我們可以操作分布式事務(wù)像操作本地事務(wù)一樣。

Seata重要組成

  • Transcation ID(XID) : 由事務(wù)協(xié)調(diào)者創(chuàng)建的全局唯一的事務(wù)ID
  • Transaction Coordinator(TC) - 事務(wù)協(xié)調(diào)器:一個(gè)獨(dú)立運(yùn)行的組件,負(fù)責(zé)維護(hù)全局事務(wù)的運(yùn)行狀態(tài),負(fù)責(zé)根據(jù)TM的指令協(xié)調(diào)并驅(qū)動(dòng)全局事務(wù)的提交或回滾,負(fù)責(zé)向資源管理器發(fā)起事務(wù)提交,回滾指令。
  • Transaction Manager - 事務(wù)管理器 :控制全局事務(wù)的邊界,負(fù)責(zé)開(kāi)啟一個(gè)全局事務(wù),并最終發(fā)起全局提交或全局回滾的決議,通知TC提交或者回滾事務(wù)。
  • Resource Manager(RM) - 資源管理器: 控制分支事務(wù),負(fù)責(zé)分支事務(wù)注冊(cè)、負(fù)責(zé)向TC匯報(bào)分支事務(wù)狀態(tài),并接收事務(wù)協(xié)調(diào)器的指令,驅(qū)動(dòng)分支(本地)事務(wù)的提交和回滾

正常執(zhí)行流程:

  • 系統(tǒng)啟動(dòng)TM事務(wù)管理者以及RM資源管理者需要向事務(wù)協(xié)調(diào)器進(jìn)行提交注冊(cè),可以看做是一種初始化。
  • 在Bussiness的業(yè)務(wù)主方法上我們需要打上@GlobalTransationl注解,通過(guò)這個(gè)注解,事務(wù)管理器TM向事務(wù)協(xié)調(diào)者(TC)申請(qǐng)開(kāi)啟一個(gè)全局分布式事務(wù),事務(wù)協(xié)調(diào)者創(chuàng)建全局事務(wù)后返回全局唯一的 XID,這個(gè)XID 會(huì)在涉及微服務(wù)的整個(gè)全局事務(wù)的上下文中進(jìn)行傳播。
  • 業(yè)務(wù)開(kāi)始,Bussiness通過(guò)Feign調(diào)用Order,并傳遞全局事務(wù)XID,Order在做寫操作的時(shí)候,RM資源管理器 (Order集成了RM)向事務(wù) 協(xié)調(diào)器TC 注冊(cè)本地分支事務(wù),該分支事務(wù)歸屬于擁有相同 XID 的全局事務(wù),同時(shí)事務(wù)協(xié)調(diào)者TC會(huì)返回一個(gè)分支事務(wù)ID:“branchId” 。說(shuō)明一下:Seate通過(guò)代理DataSource向TC發(fā)起分子事務(wù)注冊(cè)的。
  • 這個(gè)時(shí)候Order會(huì)正常的寫數(shù)據(jù)庫(kù),然后會(huì)寫入一個(gè)undo log(這個(gè)日志文件記錄了數(shù)據(jù)庫(kù)修改前的數(shù)據(jù),用來(lái)做回滾),然后提交分支事務(wù)(注意,分支事務(wù)已經(jīng)提交了) , 最后向TC上報(bào)事務(wù)處理狀態(tài)。當(dāng)然Account做的事情和Order是相同的。
  • Order和Account都調(diào)用完成,代碼回到Business,這時(shí)TM事務(wù)管理器向TC事務(wù)協(xié)調(diào)者發(fā)起全局事務(wù)提交請(qǐng)求,TC向RM事務(wù)分支發(fā)起事務(wù)提交請(qǐng)求,RM(Order, Account)直接刪除到undo log日志文件即可,因?yàn)橹耙呀?jīng)提交了本地事務(wù)

異常執(zhí)行流程:

前面2個(gè)步驟都跟上面一樣,這里省略 , 在第 3 步的時(shí)候,Order在可能因?yàn)槟撤N原因本地分支事務(wù)提交失敗了,那么RM會(huì)向TC上報(bào)一個(gè)失敗的事務(wù)狀態(tài)

在第 4 步 ,這個(gè)時(shí)候代碼回到Business,這時(shí)TM事務(wù)管理器會(huì)向TC事務(wù)協(xié)調(diào)者發(fā)起全局事務(wù)回滾請(qǐng)求,TC向RM事務(wù)分支發(fā)起事務(wù)回滾請(qǐng)求,RM(Order, Account)收到回滾指令,然后會(huì)解析undo log,指向反向操作,把數(shù)據(jù)還原到修改之前,刪除undo log,提交本地事務(wù)。

3.微服務(wù)整合seata

3.1導(dǎo)入依賴

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

3.2yaml配置seata

項(xiàng)目的yaml中對(duì)seata做配置

這里的tx-service-group: ${spring.application.name}-tx-group要和seataServer.properties中的保持一致

seata:
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: ${spring.application.name}-tx-group #it-fccar-service-driver-tx-group
  #對(duì)應(yīng)seataServer.properties中的service.vgroupMapping.it-drive-service-driver-tx-group=default
  config:
    type: nacos
    nacos:
      server-addr: ${NACOS_HOST:8.137.85.173:8848}:${NACOS_PORT:8848}
      username: nacos
      password: nacos #賬號(hào)再nacos管理界面配置
      namespace: fccar-dev #取pom.xml中的命名空間
      data-id: seataServer.properties
      group: DEFAULT_GROUP #重要,和seataServer.properties保持一樣
  registry:
    type: nacos
    nacos:
      application: service-seata #seata的服務(wù)名
      server-addr: ${NACOS_HOST:8.137.85.173:8848}:${NACOS_PORT:8848}
      username: nacos
      password: nacos #賬號(hào)再nacos管理界面配置
      namespace: fccar-dev #取pom.xml中的命名空間
      group: DEFAULT_GROUP
  enable-auto-data-source-proxy: true #開(kāi)啟seata的datasource自動(dòng)代理

在啟動(dòng)類貼注解開(kāi)啟seata , 因?yàn)閥aml做了配置,下面注解可以不要

@EnableAutoDataSourceProxy(dataSourceProxyMode="AT",useJdkProxy=false)

3.3.開(kāi)啟全局事務(wù)

開(kāi)啟全局事務(wù),在入口方法貼注解

注意:只在業(yè)務(wù)入口的微服務(wù)的方法上貼即可

@GlobalTransactional(name = "driver-wechat-register",rollbackFor = Exception.class)

到此這篇關(guān)于SpringBoot集成Seata的文章就介紹到這了,更多相關(guān)SpringBoot集成Seata內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明

    關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明

    這篇文章主要介紹了關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Spring Boot實(shí)現(xiàn)郵件服務(wù)(附:常見(jiàn)郵箱的配置)

    Spring Boot實(shí)現(xiàn)郵件服務(wù)(附:常見(jiàn)郵箱的配置)

    這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)郵件服務(wù)的相關(guān)資料,文中還附上了常見(jiàn)郵箱的配置,通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • java微信企業(yè)號(hào)開(kāi)發(fā)之開(kāi)發(fā)模式的開(kāi)啟

    java微信企業(yè)號(hào)開(kāi)發(fā)之開(kāi)發(fā)模式的開(kāi)啟

    這篇文章主要為大家詳細(xì)介紹了java微信企業(yè)號(hào)開(kāi)發(fā)之開(kāi)發(fā)模式的開(kāi)啟方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • java?String拼接json的方式實(shí)現(xiàn)

    java?String拼接json的方式實(shí)現(xiàn)

    本文主要介紹了java?String拼接json的方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Java緩存ehcache的使用步驟

    Java緩存ehcache的使用步驟

    這篇文章主要介紹了Java緩存ehcache的使用步驟,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類

    Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類

    這篇文章主要介紹了Java 如何讀取Excel格式xls、xlsx數(shù)據(jù)工具類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中常見(jiàn)的文件拷貝方式小結(jié)

    Java中常見(jiàn)的文件拷貝方式小結(jié)

    這篇文章主要為大家詳細(xì)介紹了JAVA?四種拷貝文件的方式,分析一下他們對(duì)內(nèi)存使用的方式和各自應(yīng)用的場(chǎng)景,其實(shí)也是對(duì)之前學(xué)過(guò)的知識(shí)做一個(gè)回顧吧,快跟隨小編一起學(xué)習(xí)起來(lái)吧
    2024-03-03
  • Java二叉樹(shù)的四種遍歷方式詳解

    Java二叉樹(shù)的四種遍歷方式詳解

    這篇文章主要介紹了Java二叉樹(shù)的四種遍歷,二叉樹(shù)的遍歷可以分為前序、中序、后序、層次遍歷,需要的朋友可以參考下
    2021-11-11
  • Java實(shí)現(xiàn)簡(jiǎn)易學(xué)籍管理系統(tǒng)

    Java實(shí)現(xiàn)簡(jiǎn)易學(xué)籍管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java設(shè)計(jì)模式筆記之抽象工廠代碼示例

    Java設(shè)計(jì)模式筆記之抽象工廠代碼示例

    這篇文章主要介紹了Java設(shè)計(jì)模式筆記之抽象工廠代碼示例,見(jiàn)解獨(dú)到,代碼詳細(xì),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10

最新評(píng)論

石家庄市| 土默特左旗| 西和县| 重庆市| 翁牛特旗| 云梦县| 花莲市| 鄂伦春自治旗| 开封县| 东方市| 新乡市| 东平县| 武宁县| 敖汉旗| 黄浦区| 宁德市| 丹凤县| 德州市| 章丘市| 宽甸| 三门县| 青浦区| 磴口县| 钟祥市| 山阳县| 高台县| 饶平县| 宾川县| 宜章县| 鄯善县| 泸西县| 乌什县| 华蓥市| 五大连池市| 德阳市| 永寿县| 徐闻县| 沐川县| 保定市| 海口市| 柏乡县|