Spring学习笔记(六)注解方式配置事物

当我们的项目开发有对数据库的操作时,经常需要对事物进行管理;

使用Spring框架,spring容器提供对事物进行管理的配置,使用简单的配置便可将繁琐的事物管理托管给spring容器;

Spring提供两种配置事物的方式,一种是采用注解方式,另一种是xml文件配置方式;

采用注解方式配置步骤:

首先在spring的配置文件中的beans标签加入事物的命名空间:

xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"

然后开启事物注解引擎:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"></property>
</bean>
  	<tx:annotation-driven transaction-manager="txManager"/>
在所需事物管理的业务类中添加事物注解:

@Service("personService")
@Transactional
public class PersonServiceImpl implements PersonService {

	private JdbcTemplate jdbcTemplate;

	@Override
	public void save(Person person) {
		jdbcTemplate.update("insert into person (name) values (?)",
				new Object[] { person.getName() },
				new int[] { java.sql.Types.VARCHAR });
	}
添加注解后,该类中的所有业务方法默认情况下都在各自的事物中,每个方法里的操作公用一个事物;

在默认情况下,在业务方法中如果抛出了RuntimeException,业务操作会进行回滚;

如果抛出的是checkedException,业务操作不会进行回滚;

当然我们也能手动将事物操作配置成为我们所需要的:

可以再业务方法上添加注解,控制那种异常回滚,不会滚;该方法是否支持事物等:

@Override
	@Transactional(noRollbackFor=RuntimeException.class)
	public void update(Person person) {
		jdbcTemplate.update("update person set name=? where id=?",
				new Object[] { person.getName(), person.getId()},
				new int[] { java.sql.Types.VARCHAR, java.sql.Types.INTEGER});
	}
上面的注解表示抛出运行期异常的时候不会滚,

@Transactional(rollbackFor=Exception.class)

表示checkedException时,会滚;

同时还能控制方法不支持事物:

@Transactional(propagation=Propagation.NOT_SUPPORTED)
默认情况下的所有方式采用的propagation是
PropagationREQIRED







你可能感兴趣的:(注解,spring,数据库,管理,事物)