當前位置:首頁 » 編程軟體 » 編程事務管理

編程事務管理

發布時間: 2022-05-16 15:49:31

❶ spring編程式事務和聲明式事務的區別

1.選擇編程式事務管理還是聲明式事務管理:
當你只有很少的事務操作時,編程式事務管理通常比較合適。例如,如果你有一個Web應用,其中只有特定的更新操作有事務要求,
你可能不願使用Spring或其他技術設置事務代理。這種情況下,使用 TransactionTemplate 可能是個好辦法。
只有編程式事務管理才能顯式的設置事務名稱。
另一方面,如果你的應用中存在大量事務操作,那麼聲明式事務管理通常是值得的。它將事務管理與業務邏輯分離, 而且在Spring中配置也不難。
我們的開發中,一般使用到事務的地方比較少,我覺得,編程式事務足夠了。
使用聲明式事務,對我們這種對速度要求較高的應用中。反而會帶來性能問題。

2:推薦事務處於一個較高層次,比如service上的某個函數(尤其是像我們這種sns而不像和錢掛鉤的金融系統,對數據精確性要求不是很高的的應用),
而底層的可以不考慮事務(一般情況下,資料庫自身的默認事務管理級別,就可以處理),否則可能會出現事務嵌套,增加程序復雜度。
事務往往和業務規緊密關聯,當業務邏輯發生改變,意味著的大幅度改動。系統規模達到一定程度,修改風險相當大。
Spring事務的好處是不更改現有的,僅需對現有的service bean 進行配置或者盡量少的修改就達到事務效果了。
同時,把事務統一在service層,系統結構更清晰。

❷ spring編程式事務管理問題

1.選擇編程式事務管理還是聲明式事務管理:當你只有很少的事務操作時,編程式事務管理通常比較合適。例如,如果你有一個Web應用,其中只有特定的更新操作有事務要求,你可能不願使用Spring或其他技術設置事務代理。這種情況下,使用 TransactionTemplate 可能是個好辦法。 只有編程式事務管理才能顯式的設置事務名稱。另一方面,如果你的應用中存在大量事務操作,那麼聲明式事務管理通常是值得的。它將事務管理與業務邏輯分離, 而且在Spring中配置也不難。我們的開發中,一般使用到事務的地方比較少,我覺得,編程式事務足夠了。使用聲明式事務,對我們這種對速度要求較高的應用中。反而會帶來性能問題。2:推薦事務處於一個較高層次,比如service上的某個函數(尤其是像我們這種sns而不像和錢掛鉤的金融系統,對數據精確性要求不是很高的的應用),而底層的可以不考慮事務(一般情況下,資料庫自身的默認事務管理級別,就可以處理),否則可能會出現事務嵌套,增加程序復雜度。事務往往和業務規緊密關聯,當業務邏輯發生改變,意味著的大幅度改動。系統規模達到一定程度,修改風險相當大。Spring事務的好處是不更改現有的,僅需對現有的service bean 進行配置或者盡量少的修改就達到事務效果了。同時,把事務統一在service層,系統結構更清晰。

❸ 編程式事務和聲明式事務的區別

編程式事務:所謂編程式事務指的是通過編碼方式實現事務,即類似於JDBC編程實現事務管理。管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於編程式事務管理,spring推薦使用TransactionTemplate。
聲明式事務:管理建立在AOP之上的。其本質是對方法前後進行攔截,然後在目標方法開始之前創建或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務。聲明式事務最大的優點就是不需要通過編程的方式管理事務,這樣就不需要在業務邏輯代碼中摻雜事務管理的代碼,只需在配置文件中做相關的事務規則聲明(或通過基於@Transactional註解的方式),便可以將事務規則應用到業務邏輯中。
顯然聲明式事務管理要優於編程式事務管理,這正是spring倡導的非侵入式的開發方式。
聲明式事務管理使業務代碼不受污染,一個普通的POJO對象,只要加上註解就可以獲得完全的事務支持。和編程式事務相比,聲明式事務唯一不足地方是,後者的最細粒度只能作用到方法級別,無法做到像編程式事務那樣可以作用到代碼塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務管理的代碼塊獨立為方法等等。

擴展:
Spring對編程式事務的支持

Spring中的事務分為物理事務和邏輯事務;

物理事務:就是底層資料庫提供的事務支持,如JDBC或JTA提供的事務;

邏輯事務:是Spring管理的事務,不同於物理事務,邏輯事務提供更豐富的控制,而且如果想得到Spring事務管理的好處,必須使用邏輯事務,因此在Spring中如果沒特別強調一般就是邏輯事務;

邏輯事務解決方案:
低級別解決方案:
使用工具類獲取連接(會話)和釋放連接(會話),如使用org.springframework.jdbc.datasource包中的DataSourceUtils 類來獲取和釋放具有邏輯事務功能的連接。當然對集成第三方ORM框架也提供了類似的工具類,如對Hibernate提供了SessionFactoryUtils工具類,JPA的EntityManagerFactoryUtils等,
高級別解決方案:
使用Spring提供的模板類,如JdbcTemplate、HibernateTemplate和JpaTemplate模板類等,而這些模板類內部其實是使用了低級別解決方案中的工具類來管理連接或會話

Spring提供兩種編程式事務支持:直接使用PlatformTransactionManager實現和使用TransactionTemplate模板類,用於支持邏輯事務管理。如果採用編程式事務推薦使用TransactionTemplate模板類和高級別解決方案

❹ spring的事務機制,以及是如何管理的

事務管理可以幫助我們保證數據的一致性,對應企業的實際應用很重要。

Spring的事務機制包括聲明式事務和編程式事務。

編程式事務管理:Spring推薦使用TransactionTemplate,實際開發中使用聲明式事務較多。

聲明式事務管理:將我們從復雜的事務處理中解脫出來,獲取連接,關閉連接、事務提交、回滾、異常處理等這些操作都不用我們處理了,Spring都會幫我們處理。

聲明式事務管理使用了AOP面向切面編程實現的,本質就是在目標方法執行前後進行攔截。在目標方法執行前加入或創建一個事務,在執行方法執行後,根據實際情況選擇提交或是回滾事務。

如何管理的:

Spring事務管理主要包括3個介面,Spring的事務主要是由他們三個共同完成的。

1)PlatformTransactionManager:事務管理器--主要用於平台相關事務的管理

主要有三個方法:commit 事務提交;

rollback 事務回滾;

getTransaction 獲取事務狀態。

2)TransactionDefinition:事務定義信息--用來定義事務相關的屬性,給事務管理器PlatformTransactionManager使用

這個介面有下面四個主要方法:

getIsolationLevel:獲取隔離級別;

getPropagationBehavior:獲取傳播行為;

getTimeout:獲取超時時間;

isReadOnly:是否只讀(保存、更新、刪除時屬性變為false--可讀寫,查詢時為true--只讀)

事務管理器能夠根據這個返回值進行優化,這些事務的配置信息,都可以通過配置文件進行配置。

3)TransactionStatus:事務具體運行狀態--事務管理過程中,每個時間點事務的狀態信息。

例如它的幾個方法:

hasSavepoint():返回這個事務內部是否包含一個保存點,

isCompleted():返回該事務是否已完成,也就是說,是否已經提交或回滾

isNewTransaction():判斷當前事務是否是一個新事務

聲明式事務的優缺點:

優點

不需要在業務邏輯代碼中編寫事務相關代碼,只需要在配置文件配置或使用註解(@Transaction),這種方式沒有侵入性。

缺點

聲明式事務的最細粒度作用於方法上,如果像代碼塊也有事務需求,只能變通下,將代碼塊變為方法。

❺ spring編程事務怎麼調用

兩種Spring事務管理方式:編程式、聲明式。

Spring提供兩種方式的編程式事務管理,分別是:使用TransactionTemplate和直接使用PlatformTransactionManager。

1.TransactionTempale採用和其他Spring模板,如JdbcTempalte和HibernateTemplate一樣的方法。它使用回調方法,把應用程序從處理取得和釋放資源中解脫出來。如同其他模板,TransactionTemplate是線程安全的。代碼片段:

Object result = tt.execute(new TransactionCallback()...{
public Object doTransaction(TransactionStatus status)...{
updateOperation();
return resultOfUpdateOperation();
}
});
使用TransactionCallback()可以返回一個值。如果使用則沒有返回值。

2.也可以使用PlatformTransactionManager直接管理事務。簡單地通過一個bean引用給你的bean傳遞一個你使用的 PlatformTransaction對象。然後,使用TransactionDefinition和TransactionStatus對象就可以發起、回滾、提交事務。如下片段:

DefaultTransactionDefinition def= new DefaultTransactionDefinition(); //new 一個事務 def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); // 初始化事務,參數定義事務的傳播類型; TransactionStatus status = transactionManager.getTransaction(def); //獲得事務狀態 try...{ …………….. transactionManager.commit(status); //提交事務; }catch(…..)...{ transactionManager.rollback(status); //回滾事務; }
Spring也提供聲明式事務管理。這是通過AOP實現的。大多數Spring用戶選擇聲明式事務管理,這是最少影響應用代碼的選擇,因而這是和非侵入性的輕量級容器的觀念是一致的。

1)通常通過TransactionProxyFactoryBean設置Spring事務代理。需要一個目標對象包裝在事務代理中。這個目標對象一般是一個普通Javabean。當我們定義TransactionProxyFactoryBean時,必須提供一個相關的 PlatformTransactionManager的引用和事務屬性。事務屬性含有事務定義。例如:

<bean id="transactionService"class="org.springframework. transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager"/>
property>
<property name="target">
<ref local="transactionServiceControl"/>
property>
<property name="transactionAttributes">
<props>
<prop key=」insert*」>PROPAGATION_REQUIRED,-MyCheckedExceptionprop>
<prop key=」update*」>PROPAGATION_REQUIREDprop>
<prop key=」*」>PROPAGATION_REQUIRED,readOnlyprop>
props>
property>
bean>
事務代理會實現目標對象的介面:這里是屬性名是target的引用。id是transactionServiceControl。(使用CGLIB也可以實現具體類的代理。只要設置proxyTargetClass屬性為true即可。如果目標對象沒有實現任何介面,這將自動設置該屬性為true。通常,我們希望面向介面編程。)使用proxyInterfaces屬性來限定事務代理來代理指定介面也是可以。 也可以通過從org.springframework.aop.framework.ProxyConfig繼承或所有AOP代理工廠共享的屬性來定製 TransactionProxyFactoryBean行為。

然後,說說屬性名是transactionAttributes意義:
這里的transactionAttributes屬性是定義在 org.springframework.transaction.interceptor. 中的屬性格式設置。這個包括通配符的方法名稱映射是很直觀的,如」insert*」。注意insert*的映射的值包括回滾規則。」- MyCheckException」指定如果方法拋出MyCheckException或它的子類,事務會自動回滾。可以用逗號分隔多個回滾規則。「-」 前綴強制回滾,「+」前綴指定提交(這允許即使拋出unchecked異常時也可以提交事務)。「PROPAGATION_REQUIRED」指定事務傳播范圍。

TransactionProxyFactoryBean允許你通過「preInterceptors」和 「postInterceptors」屬性設置前或後的攔截操作。可以設置任意數量的前和後通過,它們的類型可以是Advistor(切入點),MethodInterceptor或被當前Spring配置支持的通知類型。例如:ThrowAdvice,AfterReturningAdvice或BeforeAdvice。這些通知必須支持實例共享模式。如果你需要高級 AOP特性操作事務,通過org.springframework.aop.framework.ProxyFactoryBean,而不是 TransactionProxyFactory實用代理創建者。

2)另一種聲明方式:BeanNameAutoProxyCreator
使用TransactionProxyFactoryBean當事務代理包裝對象,你可以完全控制代理。如果需要用一致方式包裝大量bean。使用一個 BeanFactoryPostProcessor的一個實現,BeanNameAutoProxyCreator,可以提供另外一種方法。(Spring中,一旦ApplicationContext讀完它的初始化信息,它將初始化所有實現BeanPostProcessor介面的 bean,並且讓它們後處理ApplicationContext中所有其他的bean。所以使用這種機制,正確配置的 BeanNameAutoProxyCreator可以用來後處理所有ApplicationContext中所有其他的bean),並且把它們用事務代理包裝起來。真正生成的事務代理和使用TransactionProxyFactoryBean生成的基本一致。

最後,總結一下Spring的優點:
◆為不同的事務API提供一致的編程模型,如JTA、JDBC、Hibernate、iBATIS資料庫層JDO
◆提供比大多數事務API更簡單的、易於使用的編程式事務管理API
◆整合Spring數據訪問抽象
◆支持Spring聲明式事務管理

❻ 簡單敘述spring的編程式事務管理和聲明式事務管理兩種方式。

程式事務管理:
需要你在代碼中手動得到會話,開啟事務,提交事務,關閉會話。

聲明式事務管理:
現在一般用spring管理事務,在xml中配置好之後,在方法或者類上,使用註解進行聲明式事務管理。

詳細描述,你可以用你這個問題搜索一下。會有更多詳盡的表述

❼ spring事務管理幾種方式

Spring提供了許多內置事務管理器實現,常用的有以下幾種:

DataSourceTransactionManager(JDBC局部事務),
HibernateTransactionManager(Hibernate事務),
和JtaTransactionManager(JTA全局事務)。

Spring提供了兩種事務管理方式:
編程式事務管理和聲明式事務管理。
不推薦使用編程式事務管理,推薦使用聲明式管理。

推薦兩篇文章給你看:
http://blog.csdn.net/edward0830ly/article/details/8703123
這篇寫的中規中矩,內容比較齊全。
http://www.cnblogs.com/newsouls/p/3988216.html
這篇寫的通俗易懂,入門者看著比較容易。

❽ 什麼是spring的編程式事務處理,聲明式事務處理

spring支持編程式事務管理和聲明式事務管理兩種方式。

  • 編程式事務使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於編程式事務管理,spring推薦使用TransactionTemplate。

  • 聲明式事務是建立在AOP之上的。其本質是對方法前後進行攔截,然後在目標方法開始之前創建或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務。聲明式事務最大的優點就是不需要通過編程的方式管理事務,這樣就不需要在業務邏輯代碼中摻雜事務管理的代碼,只需在配置文件中做相關的事務規則聲明(或通過基於@Transactional註解的方式),便可以將事務規則應用到業務邏輯中。

  • 顯然聲明式事務管理要優於編程式事務管理,這正是spring倡導的非侵入式的開發方式。聲明式事務管理使業務代碼不受污染,一個普通的POJO對象,只要加上註解就可以獲得完全的事務支持。和編程式事務相比,聲明式事務唯一不足地方是,它的最細粒度只能作用到方法級別,無法做到像編程式事務那樣可以作用到代碼塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務管理的代碼塊獨立為方法等等。

    聲明式事務管理也有兩種常用的方式,一種是基於tx和aop名字空間的xml配置文件,另一種就是基於@Transactional註解。顯然基於註解的方式更簡單易用,更清爽

❾ Java 編程 ,事務管理的作用

事務就是對一系列的資料庫操作進行統一的提交或回滾操作,比如說做一個轉賬功能,要更改帳戶兩邊的數據,這時候就必須要用事務才能算是嚴謹的做法。要麼成功,要麼失敗,保持數據一致性。如果中間有一個操作出現異常,那麼回滾之前的所有操作。
這樣有什麼好處呢。
這樣可以防止在一些意外(例如說突然斷電)的情況下出現亂數據,防止資料庫數據出現問題。這邊加了錢,那邊卻還是一樣的數,這就完了。要是開放一個網上交易的平台,這樣就會出大問題的!
還有其他的一些操作,像是要添加多條數據,如果程序要求必須全部正確才能插入的話,事務又起大作用了。
等等。。。開發中為了避免這種情況一般都會進行事務管理。

在JDBC中是通過Connection對象進行事務管理的,默認是自動提交事務,可以手工將自動提交關閉,通過commit方法進行提交,rollback方法進行回滾,如果不提交,則數據不會真正的插入到資料庫中。

Hibernate中是通過Transaction進行事務管理,處理方法與JDBC中類似。

Spring中也有自己的事務管理機制,使用TransactionMananger進行管理,可以通過Spring的注入來完成此功能。

熱點內容
app什麼情況下找不到伺服器 發布:2025-05-12 15:46:25 瀏覽:714
php跳過if 發布:2025-05-12 15:34:29 瀏覽:467
不定時演算法 發布:2025-05-12 15:30:16 瀏覽:131
c語言延時1ms程序 發布:2025-05-12 15:01:30 瀏覽:166
動物園靈長類動物配置什麼植物 發布:2025-05-12 14:49:59 瀏覽:737
wifi密碼設置什麼好 發布:2025-05-12 14:49:17 瀏覽:149
三位數乘兩位數速演算法 發布:2025-05-12 13:05:48 瀏覽:399
暴風影音緩存在哪裡 發布:2025-05-12 12:42:03 瀏覽:544
access資料庫exe 發布:2025-05-12 12:39:04 瀏覽:632
五開的配置是什麼 發布:2025-05-12 12:36:37 瀏覽:366