Spring事务
1.xml的配置
<context:component-scan base-package="com.itlc.spring.tx"/>
<!--导入资源文件-->
<context:property-placeholder location="db.properties"/>
<!--配置C3P0数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
<property name="initialPoolSize" value="${jdbc.initPoolSize}"/>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
</bean>
<!--配置spring的JdbcTemplate-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置NamedParameterJdbcTemplate,该对象可以使用具名参数,其没有无参构造器,所以必须提供参数-->
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg type="javax.sql.DataSource" ref="dataSource"/>
</bean>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--启用事务注解-->
<tx:annotation-driven/>
2.事务注解-@Transactional
/*
* 添加事务注解
* 1.使用Propagation指定事务的传播行为,即当前的事务方法被
* 另外一个事务方法调用时,默认值为Propagation.REQUIRED,
* 中间一个报异常,就全部回滚,Propagation.REQUIRES_NEW,
* 遇到异常,只回滚当前,前面未出错的不回滚
* 2.使用isolation指定事务的隔离级别,最常用的取值为READ_COMMITTED
* 3.默认情况下Spring的声明式事务对所有的运行时异常进行回
* 滚,也可以通过对应的属性进行设置
* noRollbackFor:对某些异常不进行回滚
* 4.使用readOnly指定事务是否为只读,表示这个事务只读取数
* 据但不更新数据,若真的是一个只读取数据库值的方法,应设
* 置其值为true
* 5.使用timeout指定强制回滚以前事务可以占用的时间
* */
@Transactional(propagation = Propagation.REQUIRES_NEW
,isolation = Isolation.READ_COMMITTED,noRollbackFor ={RuntimeException.class}
)