applicationContext.xml
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/asl_daily_report" />
<property name="user" value="root" />
<property name="password" value="" />
<property name="maxPoolSize" value="40"/>
<property name="minPoolSize" value="1"/>
<property name="initialPoolSize" value="1"/>
<property name="maxIdleTime" value="20"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="newsDao" class="org.crazyit.app.dao.impl.NewsDaoImpl">
<property name="ds" ref="dataSource"/>
</bean>
<bean id="newsDaoTrans" class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="target" ref="newsDao"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-DataAccessException</prop>
</props>
</property>
</bean>
NewsDao.java
package org.crazyit.app.dao;
import org.springframework.dao.DataAccessException;
public interface NewsDao {
public void insert(String title, String content) throws DataAccessException;
}
NewsDaoImpl.java
package org.crazyit.app.dao.impl;
import javax.sql.DataSource;
import org.crazyit.app.dao.NewsDao;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
public class NewsDaoImpl implements NewsDao {
private DataSource ds;
public void setDs(DataSource ds) {
this.ds = ds;
}
public void insert(String title, String content) throws DataAccessException {
JdbcTemplate jt = new JdbcTemplate(ds);
jt.update("insert into news_inf values(null , ? , ?)", title, content);
jt.update("insert into news_inf values(null , ? , ?)", title, content);
}
}
测试代码:
ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml");
NewsDao dao = (NewsDao) ctx.getBean("newsDaoTrans", NewsDao.class);
try {
dao.insert("Java", "Spring2 Of J2EE");
} catch (Exception e) {
System.out.println(e.getClass().getSimpleName());
}
输入出:DuplicateKeyException
同时事务没有提交,而是回滚。
分享到:
相关推荐
Spring使用TransactionProxyFactoryBean声明式事务配置实例
适用企业系统的sturts1.2+spring2.0+jdbc 的架构。 通过TransactionProxyFactoryBean 代理机制和tx/aop两种方式来管理事务的详细demo
演示了spring基于AOP代理TransactionProxyFactoryBean实现事务
主要介绍了Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作,结合实例形式分析了spring使用TransactionProxyFactoryBean实现声明式事务相关配置、接口设置与使用技巧,需要的朋友可以参考下
Spring将事务管理分成了两类: * 编程式事务管理 * 手动编写代码进行事务管理.(很少使用) * 声明式事务管理: * 基于TransactionProxyFactoryBean的方式.(很少使用) * 需要为每个进行事务管理的类,配置一个...
Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。
4.1 学习Spring的DAO理念 4.1.1 理解Spring的DataAccessException 4.1.2 与DataSource一起工作 4.1.3 一致的DAO支持 4.2 在Spring中使用JDBC 4.2.1 JDBC代码的问题 4.2.2 使用...
Spring烦人配置文件中的事务配置.包括编程方法和声明式事务的三种方法(注解,acpectJ,transactionProxyFactoryBean)
10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...
10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...
Spring将事务管理分成了两类 编程式事务管理 手动编写代码进行事务管理.(很少使用) 声明式事务管理 基于TransactionProxyFactoryBean的方式.(很少使用) 需要为每个进行事务管理的类,配置一个...
Struts+Spring+Hibernate实现上传下载 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本: •Struts 1.2 •Spring 1.2.5 •Hibernate 3.0 本文...