您的位置:首页 > 编程语言 > Java开发

springMVC和spring各自扫描自己的注解不要相互混淆

2015-12-19 21:54 513 查看

1、问题

执行 entityManager.flush(); 总是报错:javax.persistence.TransactionRequiredException: no transaction is in progress

字面解释是:“没有启动事务”。可是事务是在配置中交给了spring管理了,在方法上加注解 @Transactional就申明了事务的,为何说没有启动事务呢。而且配置中也启动事务注解的扫描了。 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />。

2、原因

折腾了很久,分析了很久,也看了一些文章,都没说在关键上,后来有一个文章豁然开朗http://blog.csdn.net/lzw190/article/details/18989301。

3、解决

让springMVC的配置xml和spring容器的配置xml分开,在各自的xml中配置自己该做的事情,不要让springMVC去扫描不该自己管理的注解。

3.1 springMVC部分

3.1.1 web.xml 中 springMVC相关部分

<servlet>

<servlet-name>springMVC</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/mvc.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>springMVC</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

3.1.2 mvc.xml 文件中关键部分

<!-- 开启springMVC注解支持 -->

<mvc:annotation-driven />

<mvc:default-servlet-handler/>

<!-- 扫描Controller -->

<context:component-scan base-package="org.cj.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>

3.2 spring容器部分

spring容器需要扫描的注解,放在别的xml中,让spring 的Listener去解读

3.2.1 web.xml 中spring容器关键部分

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

<!--说明: 需要让spring 容器解读的配置,放在spring-开头的xml文件中 -->

/WEB-INF/spring-*.xml

</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

3.2.2 spring-core.xml文件关键部分

<!-- 自动加载构建bean -->

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

<!--开启spring的事务申明注解支持-->

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: