1. 程式人生 > >在使用spring mvc時,我使用了@Service這樣的註解, 發現使用註解@Transactional宣告的事務不起作用

在使用spring mvc時,我使用了@Service這樣的註解, 發現使用註解@Transactional宣告的事務不起作用

問題出現的場景:

在使用spring mvc時,我使用了@Service這樣的註解, 發現使用註解@Transactional宣告的事務不起作用。

我的配置如下:

<mvc:annotation-driven />

<context:component-scan base-package="org.test"/ >

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

    <tx:annotation-driven transaction-manager="txManager" />

原因是

component-scan和事務所在的上下文不一樣,component-scan所在的配置是由servlet載入的,事務所在的配置檔案是由Listener載入的。

我的解決方法

按照下面的配置,在應用啟動時,不讓spring掃描到@Service註解的類,servlet的配置檔案中這樣寫:

<context:component-scan base-package="org.test" >
 <context:exclude-filter type="annotation"  expression="org.springframework.stereotype.Service" />
</context:component-scan>

listener的上下文中增加:

<context:component-scan base-package="org.test" ></context:component-scan>