2017-05-03 25 views
1

@EnableTransactionManagement將scann爲@Transactional所有的Spring Bean,以提供交易管理預定義的包。只能激活@Transactional使用Java配置

是否有可能提供的軟件包列表,將被掃描?

例如:我想在a.b.c包中支持@Transactional,但我想忽略x.y.z包中標記爲@Transactional的類。

此類需求的原因是三方lib。它幾乎在每個班上都有@Transactional(readonly=false),但它只做內存操作。每當我打電話給這個API時,彈簧就會獲得數據庫連接,我真的需要避免這種情況。我想從交易管理中排除這整個庫。我也不能爲這個lib創建單獨的spring context。

+0

難道你不能在你自己的軟件包掃描中添加排除過濾器來忽略3方lib類嗎?請參閱http://www.concretepage.com/spring/spring-component-scan-include-and-exclude-filter-example-using-javaconfig-and-xml-with-annotation-assignable-aspect-and-regex-filter -types – StanislavL

+0

沒有,因爲這些都是春天豆類以及 –

+1

看起來你需要自己AnnotationTransactionAttributeSource在那裏你可以提供TransactionAnnotationParser跳過類,但我不知道如何正確添加源。看到這個http://stackoverflow.com/questions/8316747/using-custom-annotationtransactionattributesource-with-txannotation-driven – StanislavL

回答

0

據我知道你可以在配置文件中定義自定義事務管理器: 例子:

@Transactional("txName") 

<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(value = "txName") 

這樣,您將b在需要的地方使用交易。此外,您現在可以擁有任意數量的事務管理器,並根據需要隨時使用它。

+0

方法打上@Transacitonal在3方lib中仍然需要事務管理,因爲至少有一個是活動的。我無法更改此代碼。 –