1、问题复现
spring 3.0 + hibernate 3.2
spring mvc使用注解方式;service使用@service注解 事务使用@Transactional
事务配置使用
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
在插入或更新数据时,无报错,但数据库中无结果,而查询正常。疑为事务未提交。
2、问题检查
当修改dao层实现逻辑为:
Assert.notNull(entity, "entity不能为空");
Transaction ts = getSession().beginTransaction();
getSession().saveOrUpdate(entity);
getSession().flush();
ts.commit();
logger.debug("save entity: {}", entity);
可以正常提交插入、更新。确定为事务未提交。
3、问题分析
spring mvc使用注解方式时需要使用
<context:component-scan base-package="com.fengzhiyin" />
方式用来扫描该包以及其子包下的@Controller注解的类,纳入spring管理,而同时spring 容器也需要使用这种方式扫描包含@Service、@Components、@Required、@Autowired等注解用来管理bean和完成DI。
当
<context:component-scan base-package="com.fengzhiyin" />
出现在spring mvc的配置文件中时,web 容器在扫描包含@Service或@Components的类并包含@Transaction是,此时@Transaction并为完成,导致事务未被注册。
4、问题解决
将spring mvc中扫描controller的context:component分成两部分,将扫描其他目录的context:component放入application.xml文件中(该文件为)org.springframework.web.context.ContextLoaderListener的加载文件。
如下配置:
<!-- spring mvc 配置文件 -->
<context:component-scan base-package="com.fengzhiyin.controller" />
和
<!-- spring context配置文件 -->
<context:component-scan base-package="com.fengzhiyin.">
<context:exclude-filter type="regex" expression=".*Controller$" />
</context:component-scan>
分享到:
相关推荐
NULL 博文链接:https://xj84.iteye.com/blog/2065681
SpringMVC第12讲:<mvc:annotation-driven/>
NULL 博文链接:https://lgbolgger.iteye.com/blog/2105151
<mvc:annotation-driven> </mvc:annotation-driven> 中配置Json格式乱码。代码如下: <!--json格式乱码处理--> <mvc:message-converters register-defaults="true"> <bean class="org.springframework....
NULL 博文链接:https://yihuawuye1.iteye.com/blog/2105063
<tx:annotation-driven transaction-manager="txManager" /> <!-- <aop:config> <aop:pointcut id="defaultServiceOperation" expression="execution(* x.y.service.*Service.*(..))" /> <aop:pointcut id=...
<tx:annotation-driven transaction-manager="transactionManager" /> <!-- 保证POJO中标注@Required的属性被注入 --> <bean class="org.springframework.beans.factory.annotation....
<mvc:annotation-driven/> <!--视图解析--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework....
springMVC相关技术配置使用注解的HandlerMapping和HandlerAdapter使用<mvc:annotation-driver> 不过springBoot已经省略了这些配置 配置使用注解的Handler和Service等等使用<context:component-scan> 不过springBoot...
<tx:annotation-driven transaction-manager="transactionManager" /> <!-- 保证POJO中标注@Required的属性被注入 --> <bean class="org.springframework.beans.factory.annotation....
spring的annotation-driven配置事务管理器详解 (多数据源配置
<display-name>Spring Annotation MVC Sample</display-name> <!-- Spring 服务层的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext...
<artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>...
5.2.2 基于Annotation方式的声明式事务 基于Annotation方式的声明式事务 1 在Spring容器中注册事务注解驱动; 2 在需要事务管理的类或方法上使用@Transactional注解。 <tx:annotation-driven transaction-manager=...
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan"> ...
<mvc:annotation-driven /> <context:component-scan base-package="Controller" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/...
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="0"> <property name="interceptors"> <list> <ref bean="doubleSubmitInterceptor"/> </list> ...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> <!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 --> <context:component-scan...
<mvc:annotation-driven /> <mvc:resources mapping="/resources/**" location="/resources/" /> <mvc:default-servlet-handler /> <aop:config proxy-target-class="true"/> <tx:annotation-driven ...