ssm事務配置不起作用問題
阿新 • • 發佈:2019-02-09
在搭建ssm專案過程中遇到了,配置的事務不起作用的問題,百度了下,原因大概就是包掃描的問題:spring的配置檔案application.xml中包掃描不需要掃描@Controller註解的, 具體如下:
<context:component-scan base-package="com.practice.controller"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan>
springMVC配置檔案springMVC-servlet.xml中只需要掃描@Controller註解的,具體如下:
事務配置我用的是宣告式事務配置,在application.xml中配置的,具體如下:<context:component-scan base-package="com.practice.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 開啟事務控制的註解支援 --> <tx:annotation-driven transaction-manager="transactionManager"/>
用的時候只需要在需要事務管理的類上或方法上加@Transactional就行,當然可以在@Transactional後進行更加詳細的配置,此處不是重點,就不講了。
所以反過來,如果不移動配置,那麼就需要將@Transactional加到service層中的類或方法上。
由此可見,我們就需要養成良好的分層習慣,因為一般的公司和專案都會分層,而如果我們沒分層或者分的混亂,那麼可能在別人那不會遇到的問題自己就會遇到,即使程式碼可能完全一樣。另外,還說明了一個問題:那就是spring容器和spring mvc容器之間是層級關係的,具體的就是spring容器是spring mvc容器的父容器,在spring中的配置可以整個專案使用,spring mvc中的配置只能在spring mvc 作用範圍內,也就是說spring
mvc可以使用spring中配置的,spring不可以使用spring mvc中配置的。