2011-07-04 218 views
1

我们使用Spring + JPA为我们的RESTful网络服务应用程序。这是一个高交易应用程序,并执行大量的操作。春季基于模式的交易

我正在使用@Transaction注释方法来执行交易,并且所有工作都正常。

我只是想知道,如果交易可以在类的外部配置文件基于模式匹配管理,即所有的方法开始添加/更新/删除可以自动启用交易(没有使用@Transaction注释)?

有人可以确认这是否是可能

如果'是'请给我提供一些网页链接或示例。

谢谢。

回答

5

当然!事实上,这是Java 5和@Transactional注释之前唯一可能的解决方案。在Spring文档中查看10.5.2 Example of declarative transaction implementation。在那里您可以找到通过XML和AspectJ切入点配置事务划分的示例。

这是从文档的简单配置摘录文指出:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource"> 
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
      <!-- ... --> 
     </bean> 
    </property> 
</bean> 
<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> 

正如你所看到的,用的名字与get前缀的所有方法都被标记为只读,而FooService所有其他方法(x.y.service.FooService.*(..))切入点)是事务性的而不是只读的。

正如你所看到的,使用更详细的XML语法为你提供了一些很好的好处,比如声明性和更灵活的事务分界,主要得益于AspectJ语法(首先确保learn it)。

+0

这绝对不是我正在寻找的答案,但我没有得到太多答复,仍然在探索我的选择。但暂时还是在打电话。 – JSS