« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9712072 建立时间:2004年12月20日 |

| |
[java语言]spring中使用编程级的事务 原创空间, 软件技术
邢红瑞 发表于 2006/1/15 15:32:36 |
使用org.springframework.transaction.support.TransactionTemplate类,TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及操作成功后的事务提交。在doInTransaction中进行的操作,如果抛出未捕获异常将被自动回滚,如果成功执行,则将被自动提交。使用TransactionTemplate类,必须实现TransactionCallback接口,transactionCallback只有一个实现方法,使用匿名内部类,doInTransaction()处理事务。类似与JDbcTemplate,Callback类的编写违背很多人的编程习惯,传进匿名类之前要改成final。配置文件<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
</bean>
DAO中<property name=" transactionTemplate">
<ref bean=" transactionTemplate"/>
</property>
使用TransactionTemplate的doInTransaction() 不能抛出任何checked exceptions,必须将异常包装为unchecked exceptions,因为TransactionTemplate不支持throws 下面是代码transactionTemplate.execute(new TransactionCallback() {public Object doInTransaction(TransactionStatus ts) {try {// do stuff} catch (Exception e) {ts.setRollbackOnly();}return null;}});使用PlatformTransactionManager效率更高package module;
import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.TransactionDefinition;import org.springframework.transaction.TransactionStatus;import org.springframework.transaction.support.DefaultTransactionDefinition;import org.springframework.jdbc.datasource.DriverManagerDataSource;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.dao.DataAccessException;
import javax.sql.DataSource;
public class testTranORacleDAO { private static DataSource dataSource; private static PlatformTransactionManager transactionManager; private static JdbcTemplate jt;
public static void main(String[] args) { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver"); dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ILoveMM"); dataSource.setUsername("system"); dataSource.setPassword("manager"); DataSourceTransactionManager tm = new DataSourceTransactionManager(); tm.setDataSource(dataSource); transactionManager = tm; doUpdate(dataSource); }
public static void doUpdate(DataSource dataSource) { DefaultTransactionDefinition td = new DefaultTransactionDefinition( TransactionDefinition.PROPAGATION_REQUIRED); td.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE); td.setTimeout(10); TransactionStatus status = transactionManager.getTransaction(td);
try { update(dataSource); } catch (DataAccessException e) { transactionManager.rollback(status); throw e; } transactionManager.commit(status); }
public static void update(DataSource dataSource) { jt = new JdbcTemplate(dataSource); jt.update("delete from beers where id=2 "); jt.update("insert into beers(id,BRAND,price) values(1,'3',100)"); }} |
|
|