當前位置:首頁 » 數據倉庫 » 事務怎麼配置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

事務怎麼配置

發布時間: 2022-02-04 19:00:11

Ⅰ 怎麼樣在action中配置事務

倒薩洛克菲勒的可管理分開後隨即hi近日透露考核,mbkdfsfigopafgkldakdgoikr9hik了卡管理的開發力度空啊看拉薩的罰款阿斯科利飯卡的石佛看 有人替他感到放鬆公司、

Ⅱ spring的事務使用有幾種方式註解式事務如何配置和使用

Spring提供的事務管理可以分為兩類:編程式的和聲明式的。

編程式的,比較靈活,但是代碼量大,存在重復的代碼比較多;聲明式的比編程式的更靈活方便。

1、傳統使用JDBC的事務管理

以往使用JDBC進行數據操作,使用DataSource,從數據源中得到Connection,我們知道數據源是線程安全的,而連接不是線程安全的,所以對每個請求都是從數據源中重新取出一個連接。一般的數據源由容器進行管理,包括連接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等這些J2EE商業容器都提供了這個功能。

以往的我們使用JDBC在寫代碼時,事務管理可能會是這樣:

Connection conn = null;
try{
conn = DBConnectionFactory.getConnection;
conn.setAutoCommit(false);
//do something
conn.commit(); //commit transcation
}catch(Exception e){
conn.rollback();
}
finally{
try{
conn.close();
} catch(sqlException se){ //do sth.}
//close ResultSet,PreparedStatement,Connection
//notice:Maybe ocurr Exception when u close rs,pstmt,conn
}

按照以往的思路來寫代碼,代碼量比較長,而且容易疏忽,忘掉一些try/catch,引發一些異常無法catch,雖然有時候我們會寫DBTool類,來關閉這些資源,並且保證在關閉這些資源時,不向外拋異常,但是這樣做會導致額外的麻煩。

2、Spring提供的編程式的事務處理

Spring提供了幾個關於事務處理的類:TransactionDefinition //事務屬性定義

TranscationStatus //代表了當前的事務,可以提交,回滾。

PlatformTransactionManager這個是spring提供的用於管理事務的基礎介面,其下有一個實現的抽象類,我們使用的事務管理類例如DataSourceTransactionManager等都是這個類的子類。

我們使用編程式的事務管理流程可能如下:

(1) 聲明數據源。

(2) 聲明一個事務管理類,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等

(3) 在我們的代碼中加入事務處理代碼:

TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try{
//do sth
transactionManager.commit(ts);
}catch(Exception e){transactionManager.rollback(ts);}

使用Spring提供的事務模板TransactionTemplate:

void add()
{
transactionTemplate.execute( new TransactionCallback(){
pulic Object doInTransaction(TransactionStatus ts)
{ //do sth}
}
}

TransactionTemplate也是為我們省去了部分事務提交、回滾代碼;定義事務模板時,需注入事務管理對象。

3、Spring聲明式事務處理

Spring聲明式事務處理也主要使用了IoC,AOP思想,提供了TransactionInterceptor攔截器和常用的代理類TransactionProxyFactoryBean,可以直接對組件進行事務代理。

使用TransactionInterceptor的步驟:

(1)定義數據源,事務管理類

(2)定義事務攔截器,例如:

<bean id = "transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributeSource">
<value>
com.test.UserManager.*r=PROPAGATION_REQUIRED
</value>
</property>
</bean>

(3)為組件聲明一個代理類:ProxyFactoryBean

<bean id="userManager" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"><value>com.test.UserManager</value></property>
<property name="interceptorNames">
<list>
<idref local="transactionInterceptor"/>
</list>
</property>
</bean>

使用TransactionProxyFactoryBean:

<bean id="userManager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target"><ref local="userManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

TransactionProxyFactoryBean只是為組件的事務代理,如果我們要給組件添加一些業務方面的驗證等,可以使用TransactionTemplate加攔截器方式,為組件添加多個攔截器,spring AOP中提供了三類Advice,即前增強,後增強,拋出異常時的增強,可以靈活使用。

Ⅲ spring的聲明式事務怎麼配置

這是聲明式事物里的註解式事物配置
<!-- 事務管理器 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事務註解驅動,標注@Transactional的類和方法將具有事務性 -->
<tx:annotation-driven transaction-manager="txManager" />

Ⅳ spring使用事務註解時怎麼配置

我的測試代碼跟樓主你的類似。
我貼一下錯誤,當我給類加上註解的時候會報這個錯:
xception in thread "main" org.springframework..: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

去掉呢。就沒事了。我的定義里把save等設置為非read-only,跟你的一樣。

故證明:註解比XML配置優先順序要高。

Ⅳ spring的事務有幾種方式,如何配置事務

然後在目標方法開始之前創建並加入事務,執行完目標方法後根據執行情況提交或回滾事務。
聲明式事務管理又有兩種方式:基於XML配置文件的方式:在方法執行前後進行攔截:編碼方式;聲明式事務管理方式。
基於AOP技術實現的聲明式事務管理,實質就是實現方式共有兩種

Ⅵ SPring事務怎麼寫配置過得怎麼寫到方法裡面

這種方式用的很少,但是spring提供了模版類:org.springframework.transaction.support.TransactionTemplate.TransactionTemplate是線程安全的,可以在多個業務類中共享TransactionTemplate實例進行事務管理:

private SteelPipeLabelDao steelPipeLabelDao;//使用Spring提供的模版類構建
TransactionTemplate template;//通過IoC注入
public void updateSteelTagCheckingConfirm(String steelTagId,String
recReviseTime,String status,String recRevisor) throws Exception
{
List list = steelPipeLabelDao.querySteelTagChecking();
SteelTagCheckingModel steelTagCheckingModel = (SteelTagCheckingModel) list.get(0);
steelTagCheckingModel.setId(null);
steelTagCheckingModel.setRecCreateTime(new Date());
steelTagCheckingModel.setRecReviseTime(new Date());
steelTagCheckingModel.setStatus(status);
steelTagCheckingModel.setRecRevisor(recRevisor);

template.execute(new (){
protected void doInTransactionWithoutResult(TransactionStatus status){
steelPipeLabelDao.querySteelTagCheckingConfirm(steelTagId);//修改
steelPipeLabelDao.insertSteelTagCheckingConfirm(steelTagCheckingModel);//新增
}
}
);
}

b.使用org.springframework.transaction.PlatformTransactionManager來實現事務管理:

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

TransactionStatus status = txManager.getTransaction(def);
try {
// execute your business logic here
}
catch (MyException ex) {
txManager.rollback(status);
throw ex;
}
txManager.commit(status);

Ⅶ jfinal聲明式事務怎樣配置

5.7 聲明式事務

ActiveRecord支持聲明式事務,聲明式事務需要使用ActiveRecordPlugin提供的攔截器來實現,攔截器的配置方法見Interceptor有關章節。以下代碼是聲明式事務示例:

//本例僅為示例,並未嚴格考慮賬戶狀態等業務邏輯
@Before(Tx.class)
publicvoidtrans_demo(){
//獲取轉賬金額
IntegertransAmount=getParaToInt("transAmount");
//獲取轉出賬戶id
IntegerfromAccountId=getParaToInt("fromAccountId");
//獲取轉入賬戶id
IntegertoAccountId=getParaToInt("toAccountId");
//轉出操作
Db.update("updateaccountsetcash=cash-?whereid=?",
transAmount,fromAccountId);
//轉入操作
Db.update("updateaccountsetcash=cash+?whereid=?",
transAmount,toAccountId);
}

以上代碼中,僅聲明了一個Tx攔截器即為action添加了事務支持。除此之外ActiveRecord還配備了TxByActionKeys、TxByActionKeyRegex、TxByMethods、TxByMethodRegex,分別支持actionKeys、actionKey正則、actionMethods、actionMethod正則聲明式事務,以下是示例代碼:

publicvoidconfigInterceptor(Interceptorsme){
me.add(newTxByMethodRegex("(.*save.*|.*update.*)"));
me.add(newTxByMethods("save","update"));

me.add(newTxByActionKeyRegex("/trans.*"));
me.add(newTxByActionKeys("/tx/save","/tx/update"));
}

上例中的TxByRegex攔截器可通過傳入正則表達式對action進行攔截,當actionKey被正則匹配上將開啟事務。TxByActionKeys可以對指定的actionKey進行攔截並開啟事務,TxByMethods可以對指定的method進行攔截並開啟事務。

注意:MySql資料庫表必須設置為InnoDB引擎時才支持事務,MyISAM並不支持事務。

網頁鏈接

Ⅷ 如何配置spring事務

可以,將Hibernate的數據源作為Spring配置文件applicationContext的一個bean結點,然後在下面調用這個bean節點

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
</property>
<property name="url"
value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs">
</property>
<property name="username" value="sa"></property>
<property name="password" value="sa"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/handson/vo/UserInfo.hbm.xml</value></list>
</property></bean>

<bean id="userInfoDao" class="com..UserInfoDAOImpl">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

Ⅸ spring的事務如何配置

spring的聲明式事務配置: 1. <!-- 配置sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"> <value>/WEB-INF/classes/hibernate.cfg.xml</value> </property> </bean> 2. 配置事務管理器 <!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> 3. 配置事務特性 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> 4. 配置哪些類的哪些方法配置事務 <aop:config> <aop:pointcut id="allManagerMethod" ession="execution(* com.yyaccp.service.impl.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"> </aop:config>