Spring中的程式設計式事務與宣告式事務
阿新 • • 發佈:2019-02-16
程式設計式事務:
使用PlatformTransactionManager及TransactionTemplate ,其中PlatformTransactionManager可在xml檔案中配置
1.宣告資料來源
2.宣告一個事務管理類,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等
<bean id="dsTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="stptdemo" /> </bean>
需要注入dataSource資料來源。
3.事務處理方式:(TransactionTemplate也是為我們省去了部分事務提交、回滾程式碼;定義事務模板時,需注入事務管理物件。 )
private static PlatformTransactionManager transactionManager; try{ TransactionTemplate tt = new TransactionTemplate(transactionManager); tt.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { JdbcTemplate jt = DbUtil.getJdbcTemplate("stptdemo"); StatInstance instance = new AuditStatInstance(jt); instance.action(list, sql); return null; } }); }catch(Exception e){ log.error("service error:"+e.getMessage()); } public static PlatformTransactionManager getTransactionManager() { return transactionManager; } @Resource(name="dsTransactionManager") public void setTransactionManager(PlatformTransactionManager transactionManager) { AuditManager.transactionManager = transactionManager; }
宣告式事務:
提供了TransactionInterceptor攔截器和常用的代理類TransactionProxyFactoryBean,可以直接對元件進行事務代理。
也可使用全註解方式。
1.定義資料來源
2 配置事務管理器 xml中配置事務管理器,注入sessionfactory
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean>
具體實現類中:
3.全註解配置
@Transactional(value="txManager" propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
/* 功能模組入口點,beanid即資料庫配置中的name */
@Service("sampleService")
@Scope("prototype")
public class SampleService implements ITaskService