問題出現的場景:
在使用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注解的類
<context:component-scan base-package="org.test" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>