我们使用Spring + JPA为我们的RESTful网络服务应用程序。这是一个高交易应用程序,并执行大量的操作。春季基于模式的交易
我正在使用@Transaction
注释方法来执行交易,并且所有工作都正常。
我只是想知道,如果交易可以在类的外部配置文件基于模式匹配管理,即所有的方法开始添加/更新/删除可以自动启用交易(没有使用@Transaction注释)?
有人可以确认这是否是可能?
如果'是'请给我提供一些网页链接或示例。
谢谢。
我们使用Spring + JPA为我们的RESTful网络服务应用程序。这是一个高交易应用程序,并执行大量的操作。春季基于模式的交易
我正在使用@Transaction
注释方法来执行交易,并且所有工作都正常。
我只是想知道,如果交易可以在类的外部配置文件基于模式匹配管理,即所有的方法开始添加/更新/删除可以自动启用交易(没有使用@Transaction注释)?
有人可以确认这是否是可能?
如果'是'请给我提供一些网页链接或示例。
谢谢。
当然!事实上,这是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)。
这绝对不是我正在寻找的答案,但我没有得到太多答复,仍然在探索我的选择。但暂时还是在打电话。 – JSS