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
同时事务没有提交,而是回滚。
分享到:
相关推荐
TransactionProxyFactoryBean是Spring提供的一种工具,用于创建带有事务策略的对象代理,它是基于动态代理实现的,能够帮助我们将事务管理逻辑与业务代码分离,提高代码的可维护性和可测试性。 首先,让我们了解...
总结来说,本例子通过`TransactionProxyFactoryBean`和`@Transactional`展示了如何在Spring中实现声明式事务管理,这两种方式都利用了AOP来封装事务逻辑,使代码更加整洁,降低了事务管理的复杂性。在实际应用中,...
**配置TransactionManager**:创建PlatformTransactionManager Bean,MyBatis与Spring整合时通常使用SqlSessionTemplate或者MyBatis的SqlSessionInterceptor配合Spring的TransactionProxyFactoryBean来实现事务管理...
Spring提供了声明式事务管理,允许开发者在配置文件中定义事务边界,而无需在代码中显式处理。源码中,你可以看到TransactionProxyFactoryBean和PlatformTransactionManager是如何协同工作的,它们是如何实现事务的...
3.0.5.RELEASE版本支持编程式和声明式事务管理,源代码中可以学习到TransactionProxyFactoryBean、PlatformTransactionManager等类的工作原理,以及如何使用@Transactional注解进行事务控制。 最后,Spring的测试...
3. **TransactionProxyFactoryBean** 或者 `@EnableTransactionManagement`:用于创建代理对象,拦截带有@Transactional的方法并管理事务。 在源码分析中,我们可以看到当一个方法被@Transactional标记后,Spring会...
5. **事务管理**:探索 TransactionProxyFactoryBean 和 PlatformTransactionManager 接口,理解 Spring 如何实现事务的声明式和编程式管理。 6. **模版类的内部工作**:查看 RestTemplate 和 JdbcTemplate 的源码...
Spring事务原理和配置 Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两...
本文将深入探讨如何基于AOP(面向切面编程)来实现Spring的事务管理,特别是通过TransactionProxyFactoryBean。让我们一起探索这个主题。 首先,了解什么是AOP。AOP是Spring框架的核心特性,它允许我们在不修改业务...
2. 事务管理:Spring的声明式事务管理是通过AOP实现的,通过@Transactional注解可以实现事务的自动开启和提交。查看TransactionProxyFactoryBean的源码,可以深入理解这一过程。 五、安全升级 Spring 2.5.6.SEC02是...
在 Spring 中,声明式事务处理可以通过配置 TransactionProxyFactoryBean 来实现。TransactionProxyFactoryBean 是一个 FactoryBean,它可以创建一个代理对象,该代理对象可以拦截业务方法的调用,并对事务进行管理...
Spring 事务管理是其核心特性之一,用于确保在执行数据库操作时的一致性和可靠性。它提供了五种不同的配置方式来适应不同的应用场景。以下是对这些配置方式的详细解释: 1. **基于代理的事务管理(Proxy-based ...
在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate的SessionFactory和SessionFactoryBuilder上使用Spring的TransactionProxyFactoryBean来创建...
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> *">PROPAGATION_REQUIRED,readOnly *">PROPAGATION_REQUIRED,readOnly *">PROPAGATION_REQUIRED,readOnly *">...
根据提供的信息,我们可以深入探讨Spring框架中的声明式事务配置及其多种实现方式。声明式事务管理是一种简化事务管理的方式,它允许开发人员通过配置而非编程来指定事务边界,从而减少了代码的复杂性并提高了可维护...
`TransactionProxyFactoryBean` 是Spring提供的一种工具,用于创建带有事务管理功能的代理对象,使得业务逻辑对象能够透明地参与到事务处理中。本示例将详细解析如何使用`TransactionProxyFactoryBean`进行声明式...
Spring 事务配置是Spring框架中不可或缺的一部分,它用于管理和协调应用程序中的事务边界,确保数据的一致性和完整性。在Spring中,事务配置主要涉及到三个核心组件:DataSource、TransactionManager和代理机制。...
Spring框架在处理事务时提供了五种不同的配置方式,这些配置主要涉及到事务的声明式管理和编程式管理。在Spring中,事务管理通常分为三部分:DataSource、TransactionManager和代理机制。DataSource是数据源,...