仅使用Java Config为预定义的包激活@Transactional

时间:2017-05-03 13:07:30

标签: java spring spring-transactions

@EnableTransactionManagement会扫描@Transactional的所有Spring Bean,以便提供交易管理。

是否可以提供将要扫描的包列表?

例如:我希望在@Transactional包中支持a.b.c,但我想忽略包@Transactional中标有x.y.z的类。

这种wird要求的原因是3方lib。几乎每个类都有@Transactional(readonly=false),但它只进行内存操作。每次当我调用这个API时,spring都会获得数据库连接,而我真的需要避免这种情况。我想从事务管理中排除整个lib。我也无法为这个lib创建单独的spring上下文。

1 个答案:

答案 0 :(得分:0)

据我所知,您可以在配置文件中定义自定义事务管理器: 示例:

 <tx:annotation-driven transaction-manager="txManagerRest" proxy-target-class="true"/>

<bean id="txManagerRest" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSourceRest"/>
</bean>

然后,您可以在希望此自定义事务管理器的类中设置:

@Transactional("txName")

@Transactional(value = "txName")

通过这种方式,您可以在任意位置使用事务。 此外,您现在可以拥有任意数量的事务管理器,并在您需要的任何地方使用它。