当前位置: 首页 > 知识库问答 >
问题:

使用aspectj进行Spring事务管理

包修贤
2023-03-14
<!-- Creating TransactionManager Bean, since JDBC we are creating of type 
    DataSourceTransactionManager -->
<bean id="transactionManager1"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource1" />
</bean>

<!-- MySQL DB DataSource -->
<bean id="dataSource1"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/TestDB" />
    <property name="username" value="t" />
    <property name="password" value="t123" />
</bean>

上下文2。XML

<!-- Creating TransactionManager Bean, since JDBC we are creating of type 
    DataSourceTransactionManager -->
<bean id="transactionManager2"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource2" />
</bean>

<!-- MySQL DB DataSource -->
<bean id="dataSource2"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/TestDB2" />
    <property name="username" value="t2" />
    <property name="password" value="t2123" />
</bean>

这会导致将抽象类的transactionManager属性设置为服务器启动期间创建的最后一个注释事务方面bean'org.springframework.transaction.interceptor.TransactionAspectSupport。

因此,如果实例化的最后一个bean是dataSource1,则在dataSource1上创建事务,否则在DataSource2上创建事务。如何解决这个问题?

@Transactional(propagation = Propagation.REQUIRED, rollbackFor =   customException.class)
@Override
public void addDoc(param doc) throws customException{

    addOrUpdate(testQuery, doc, "add new doc");
}

共有1个答案

公孙弘深
2023-03-14

可以使用限定符来指示要使用的事务管理器:

 <tx:annotation-driven/>
    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource1" />
    <qualifier value="transactionManager1"/>
</bean>
<bean id="transactionManager2"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource2" />
    <qualifier value="transactionManager2"/>
</bean>

并用@Transactional(“TransactionManager1”)@Transactional(“TransactionManager2”)注释服务方法。

有关如何定义多个事务管理器的详细信息,请参阅Spring DOC

 类似资料:
  • 我发现实际上是Spring,我能够设置一些工作。现在,我想使用Hibernate/JPA将导入的数据保存到数据库中,但我总是出现这样的错误: 我明白问题出在交易上。以下是和的spring java配置: 这是导致异常的代码: 有什么解决这个问题的想法吗? [编辑]我也放入了作业定义和步骤定义。我所有的Spring配置都是用Java编写的。 任何人都可以给出更多的见解,如何在spring Batch

  • 问题内容: Spring框架在多大程度上适用于事务处理?我读过《 Spring In Action》一书中的建议,并提供了一些示例,这些示例创建了不用担心会话和事务管理的DAO方法,只需通过以XML设置会话工厂和事务模板,然后将它们连接到DAO中即可。另一方面,SpringSource.org的文档建议需要大量的XML和/或注释才能实现此目的。 真相是什么,我按照以下方式获取代码的最简单方法是什么

  • 我们使用JPA(Hibernate4)和Spring4管理JTA事务。由于应用程序的某些部分也使用JDBC来访问数据库,因此我们需要确保JDBC和JPA加入同一个事务,以查看提交之前另一个事务发生了什么变化。 您可以在GitHub https://GitHub.com/abenneke/sandbox/tree/master/spring-hibernate4-transaction上找到这些问题

  • 本文向大家介绍Spring 使用注解方式进行事务管理配置方式,包括了Spring 使用注解方式进行事务管理配置方式的使用技巧和注意事项,需要的朋友参考一下 使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 步骤三、在接口或类的声明处 ,写一个@Transactional. 要是只在接口上写, 接口的

  • 问题内容: 我正在将项目从Java 7迁移到Java 8,而我遇到的问题与使用进行AspectJ编织有关。 根据Haus文档,我可以使用在Java 6和7上运行的此插件成功配置编织。但是问题是,我还没有找到使用(和找到)支持Java 8的插件版本7的任何方法。我在这里看到插件7添加了Java 8支持,但是找不到使用它的方法。 这是我需要的配置插件: 我确认上述使用1.6版的代码对于Java 7可以

  • 在我从Jboss AS5迁移到Wildfly9应用程序的过程中,我试图在Wildfly:javax.transaction.api中加载一个模块。看Wildfly文章如何在WF8中加载模块,它说您可能不需要显式加载一些模块,因为它们是隐式加载的。 然后我在applictionContext.xml中定义它 在jboss-deployment-structure.xml中 但是我得到了这个错误: 谢