Spring事務(wù)流程包括:配置事務(wù)管理器、注解事務(wù)、開啟事務(wù)、執(zhí)行業(yè)務(wù)邏輯、提交或回滾事務(wù)。
首先配置事務(wù)管理器,選擇合適的事務(wù)管理器,然后在需要管理事務(wù)的方法上添加注解,如@Transactional,標(biāo)識(shí)該方法需要受事務(wù)管理。
接著在業(yè)務(wù)邏輯方法內(nèi)部對(duì)數(shù)據(jù)庫進(jìn)行操作,事務(wù)管理器將監(jiān)聽這些操作,并在方法執(zhí)行完畢后決定是否提交或回滾事務(wù)。
這一流程確保了在業(yè)務(wù)邏輯操作中的數(shù)據(jù)一致性和完整性。
首先分別定義多個(gè)transactional manager,并為qualifier屬性指定不同的值;然后在需要使用@Transactional注解的時(shí)候指定TransactionManager的qualifier屬性值或者直接使用bean名稱。配置和代碼使用的例子:
spring提供了許多內(nèi)置事務(wù)管理器實(shí)現(xiàn),常用的有以下幾種: datasourcetransactionmanager(jdbc局部事務(wù)), hibernatetransactionmanager(hibernate事務(wù)), 和jtatransactionmanager(jta全局事務(wù))。 spring提供了兩種事務(wù)管理方式: 編程式事務(wù)管理和聲明式事務(wù)管理。
1、為什么人們會(huì)猶豫使用微服務(wù)?
我見過許多開發(fā)者在這個(gè)問題上摸索。畢竟,在面試微服務(wù)架構(gòu)師角色時(shí),他們會(huì)被問到這個(gè)問題,所以承認(rèn)它的缺點(diǎn)可能有點(diǎn)棘手。以下是一些很好的答案:
它們需要大量協(xié)作 - 微服務(wù)需要大量的合作。不同的微服務(wù)模塊,可能分散在不同的團(tuán)隊(duì),團(tuán)隊(duì)之間需要始終保持良好的同步。
他們需要建立繁重的架構(gòu) - 系統(tǒng)是分布式的,架構(gòu)涉及很多。 他們需要過多的計(jì)劃來處理操作開銷 - 如果您計(jì)劃使用微服務(wù)架構(gòu),則需要為操作開銷做好準(zhǔn)備。 需要熟練的專業(yè)人員,他們可以支持異構(gòu)分布的微服務(wù)。
2、Spring Cloud 是什么
1、 Spring Cloud是一系列框架的有序集合。它利用SpringBoot的開發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心、智能路由、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用SpringBoot的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。
2、 Spring Cloud并沒有重復(fù)制造輪子,它只是將各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來,通過SpringBoot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者留出了一套簡(jiǎn)單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。
Spring支持事務(wù)類型:編程式事務(wù)和聲明式事務(wù)。編程式事務(wù)是在代碼中進(jìn)行硬編碼,與業(yè)務(wù)的耦合度高,難以復(fù)用。
聲明式事務(wù):本質(zhì)使用AOP,將業(yè)務(wù)和事務(wù)管理分離,降低耦合度和提高事務(wù)的復(fù)用能力。
聲明式事務(wù)可以通過注解和配置來管理事務(wù),操作簡(jiǎn)單。
1、 Spring的 IOC和AOP機(jī)制 ?
2、 Spring中 `@Autowired` 和 `@Resource` 注解的區(qū)別?
3、依賴注入的方式有幾種,各是什么?
4、講一下什么是 Spring ?
5、 Spring的AOP理解:
6、Spring的IOC理解
7、解釋一下 Spring bean的生命周期
8、 解釋Spring支持的幾種bean的作用域
9、 Spring基于xml注入bean的幾種方式:
10、Spring框架中都用到了哪些設(shè)計(jì)模式?
11、聊一聊Spring中@Transactional注解及其失效的六種場(chǎng)景
12、Spring AOP(思想)以及AspectJ框架(重點(diǎn))
在 Spring Boot 中實(shí)現(xiàn)事務(wù)控制,其原理是基于AOP(面向切面編程),AOP將事務(wù)控制作為一個(gè)切面,把事務(wù)控制嵌入到每一個(gè)數(shù)據(jù)庫操作代碼中,每次在操作數(shù)據(jù)庫前,AOP會(huì)為其添加上一層事務(wù)殼,以保證數(shù)據(jù)庫操作的原子性、完整性和并發(fā)性。
當(dāng)有一次操作失敗時(shí),那么就會(huì)發(fā)送一條ROLLBACK指令,讓數(shù)據(jù)庫回滾到未操作前的狀態(tài),以保證數(shù)據(jù)的安全。
在Spring Service中,如果完全使用Hibernate 進(jìn)行操作,那么只有在事務(wù)結(jié)束時(shí)都會(huì)按順序刷新所有語句的結(jié)果到數(shù)據(jù)庫,但如果事務(wù)中存在原始SQL語句,那么執(zhí)行順序就會(huì)出現(xiàn)問題,原始SQL的執(zhí)行會(huì)在hibernat語句之前,解決方法是在hibernate的session中使用session.flush()將數(shù)據(jù)刷到數(shù)據(jù)庫中。
Spring的事務(wù)實(shí)現(xiàn)原理
事務(wù)管理是應(yīng)用系統(tǒng)開發(fā)中必不可少的一部分。Spring 為事務(wù)管理提供了豐富的功能支持。Spring 事務(wù)管理分為編程式和聲明式兩種。編程式事務(wù)指的是通過編碼方式實(shí)現(xiàn)事務(wù);聲明式事務(wù)基于 AOP,將具體的邏輯與事務(wù)處理解耦。生命式事務(wù)管理使業(yè)務(wù)代碼邏輯不受污染,因此實(shí)際使用中聲明式事務(wù)用的比較多。
(1)在要開啟事務(wù)的方法上加@Transactional注解;
(2)此時(shí)Spring就會(huì)使用AOP的思想,對(duì)你的這個(gè)方法在執(zhí)行之前,先去開啟事務(wù),執(zhí)行完畢之后根據(jù)方法是否報(bào)錯(cuò),決定回滾或者提交事務(wù)。
事務(wù)隔離機(jī)制事務(wù)分三個(gè)部分DataSource、TransactionManager和代理機(jī)制;五個(gè)種方式:1每個(gè)bean單獨(dú)代理;2共享基類;3攔截器(beanid攔截);4tx標(biāo)簽配置的攔截器;5全注解 傳播,。PROPAGATION_REQUIRED--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事 務(wù)。這是最常見的選擇。。PROPAGATION_SUPPORTS一支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù) 方式執(zhí)行。。PROPAGATION_MANDATORY一支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異 常。。PROPAGATION_REQUIRES_NEW一新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù) 掛起。。PROPAGATION_NOT_SUPPORTED一以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事 務(wù),就把當(dāng)前事務(wù)掛起。。PROPAGATION_NEVER一以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異 常。?事務(wù)隔離級(jí)別。DEFAULT使用數(shù)據(jù)庫設(shè)置的隔離級(jí)別(默認(rèn)),由DBA默認(rèn)的設(shè)置來決定隔離 級(jí)別.。READ_UNCOMMITTED會(huì)出現(xiàn)臟讀、不可重復(fù)讀、幻讀(隔離級(jí)別最低,并發(fā) 性能高)。READ_COMMITTED大多數(shù)主流數(shù)據(jù)庫的默認(rèn)事務(wù)等級(jí),保證了一個(gè)事務(wù)不會(huì)讀 到另一個(gè)并行事務(wù)已修改但未提交的數(shù)據(jù),避免了“臟讀取”。該級(jí)別適用于大多 數(shù)系統(tǒng);會(huì)出現(xiàn)不可重復(fù)讀、幻讀問題(鎖定正在讀取的行)。REPEATABLE_READ保證了一個(gè)事務(wù)不會(huì)修改已經(jīng)由另一個(gè)事務(wù)讀取但未提交 (回滾)的數(shù)據(jù)。避免了“臟讀取”和“不可重復(fù)讀取”的情況,但是帶來了更多的 性能損失;會(huì)出幻讀(鎖定所讀取的所有行)。SERIALIZABLE最嚴(yán)格的級(jí)別,事務(wù)串行執(zhí)行,資源消耗最大;保證所有的情況不 會(huì)發(fā)生(鎖表)