Java 我如何在春季实现自己的@traactional感知服务

Java 我如何在春季实现自己的@traactional感知服务,java,spring,Java,Spring,我正在编写一个可以与多个数据库和web服务对话的应用程序。我想使用Spring的@Transactional注释,这样任何一个中的失败都可以回滚它们 我不清楚该怎么做,搜索后也找不到任何例子 我的一个想法是创建一个自定义方面的bean,并使用它来拦截方法,添加我自己的自定义代码来回滚问题。但我相信一定有办法以标准化的方式做到这一点 谢谢大家! Alex您应该在spring配置xml中声明如下内容,以便每个数据源能够在应用程序中使用@Transactional: <tx:annotation

我正在编写一个可以与多个数据库和web服务对话的应用程序。我想使用Spring的@Transactional注释,这样任何一个中的失败都可以回滚它们

我不清楚该怎么做,搜索后也找不到任何例子

我的一个想法是创建一个自定义方面的bean,并使用它来拦截方法,添加我自己的自定义代码来回滚问题。但我相信一定有办法以标准化的方式做到这一点

谢谢大家!


Alex

您应该在spring配置xml中声明如下内容,以便每个数据源能够在应用程序中使用@Transactional:

<tx:annotation-driven transaction-manager="txManager"/>
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

实现分布式事务最直接的方法是JTA,但我认为它在您的情况下不可行,因为您还需要涵盖web服务

但是,您可以通过为事务资源注册s来手动实现“尽力而为”解决方案。通过这种方式,您可以将它们与
@Transactional
集成


请参阅。

此外,如果您使用的是多个数据库,也许您应该使用XA数据源这似乎是正确的选择。我假设我在执行事务时注册自己,当我需要回滚时,Spring将在CompleteTion(..)后回调。然后,我可以将一条消息安排到web服务,以回滚它所做的工作。下面是: