事务的控制(配置文件注解)

1.使用tx标签配置的拦截器

<!– from the file 'context.xml' –><?xml version="1.0" encoding="UTF-8"?><beans xmlns=""xmlns:xsi=""xmlns:aop=""xmlns:tx=""xsi:schemaLocation=" http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"><bean id="fooService" class="x.y.service.DefaultFooService"/> <tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="get*" read-only="true"/><tx:method name="*"/> </tx:attributes> </tx:advice><aop:config> <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/> </aop:config><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/> <property name="username" value="scott"/> <property name="password" value="tiger"/></bean><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean></beans>2.注解方式@Transactional (Spring框架)

默认式Spring处理声明式事务管理的规则遵守只在遇到unchecked exceptions时自动回滚 @Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上。

然而,,请注意只是使用 @Transactional 注解并不会启用事务行为,

它仅仅 是一种元数据,能够被可以识别 @Transactional 注解和上述的配置适当的具有事务行为的beans所使用。上面的例子中,其实正是 <tx:annotation-driven/>元素的出现 开启 了事务行为。@Transactional 注解是用来指定接口、类或方法必须拥有事务语义的元数据。

如:“当一个方法开始调用时就开启一个新的只读事务,并停止掉任何现存的事务”。

默认的 @Transactional 设置如下:1.事务传播设置是 PROPAGATION_REQUIRED2.事务隔离级别是 ISOLATION_DEFAULT3.事务是 读/写4.事务超时默认是依赖于事务系统的,或者事务超时没有被支持。任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns=""xmlns:xsi=""xmlns:aop=""xmlns:tx=""xsi:schemaLocation=" http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"><bean id="fooService" class="x.y.service.DefaultFooService"/> <tx:annotation-driven transaction-manager="txManager"/> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean></beans>

java文件

@Transactional(readOnly = true)public class DefaultFooService implements FooService { public Foo getFoo(String fooName) {}@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)public void updateFoo(Foo foo) {}}DefaultFooService 类在类的级别上被注解为只读事务,但是,这个类中的 updateFoo(Foo) 方法的 @Transactional 注解的事务设置将优先于类级别注解的事务设置。

勇于接受自己的失败,告诉自己,这就是自己的现实,

事务的控制(配置文件注解)

相关文章:

你感兴趣的文章:

标签云: