問題出現的場景:spring
在使用spring mvc時,我使用了@Service這樣的註解, 發現使用註解@Transactional聲明的事務不起做用。express
個人配置以下:mvc
<mvc:annotation-driven />component
<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" /> servlet
緣由是:io
component-scan和事務所在的上下文不同,component-scan所在的配置是由servlet加載的,事務所在的配置文件是由Listener加載的。 class
個人解決方法:test
安裝下面的配置,在應用啓動時,不讓spring掃描到@Service註解的類配置
<context:component-scan base-package="org.test" > <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>