`
xieyan30
  • 浏览: 49166 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

spring 事务问题 求救(请大家帮我看看)--2013/4/26已解决

 
阅读更多

以前做过的一个spring mvc框架的配置,最开始的时候全部是xml配置,事务管理没有问题,用的是拦截器那种。现在修改框架,为了使用方便,修改了配置文件,发现事物管理不好用了,求大神赐教。

我输出注入action的service,看到控制台的信息不是代理类的信息,是service本身类信息(LoginServiceImpl@19b4c30)。说明,事务没有加入到service。

也不想全部使用annonation,这样开发的时候,还需要给类或者方法追加annonation标记。

xml如下:applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context-3.2.xsd 
                           http://www.springframework.org/schema/tx 
                           http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
                           http://www.springframework.org/schema/aop 
                           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd ">

    <context:property-placeholder location="classpath:properties/jdbc.properties"/>

    <!-- データソース -->
    <bean id="dataSource" 
          class="org.apache.commons.dbcp.BasicDataSource" 
          destroy-method="close" 
          p:driverClassName="${jdbc.driverClassName}" 
          p:url="${jdbc.url}" 
          p:username="${jdbc.userName}" 
          p:password="${jdbc.password}"
          p:maxActive="100"
          p:maxIdle="30"
          p:maxWait="500"
          p:defaultAutoCommit="false"/>

    <!-- トランザクション マネジャー -->
    <bean id="txManager" 
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="del*, delete*" propagation="REQUIRED" read-only="false" isolation="READ_COMMITTED" rollback-for="Exception"/>
            <tx:method name="upd*, update*" propagation="REQUIRED" read-only="false" isolation="READ_COMMITTED" rollback-for="Exception"/>
            <tx:method name="ins*, insert*" propagation="REQUIRED" read-only="false" isolation="READ_COMMITTED" rollback-for="java.lang.RuntimeException"/>
            <tx:method name="find*, get*, select*" propagation="SUPPORTS" isolation="READ_COMMITTED"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="serviceMethod" expression="execution(* app.*.service..*(..))"/>
        <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>
    </aop:config>

    <bean id="sqlSessionFactory" 
          class="org.mybatis.spring.SqlSessionFactoryBean" 
          p:dataSource-ref="dataSource"
          p:configLocation="classpath:common/mybatis/config/mybatisConfig.xml"
          p:mapperLocations="classpath:common/mybatis/xml/*.xml"
          p:typeAliasesPackage="common.mybatis.entity"/>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" 
          p:basePackage="common.mybatis.dao"/>

    <context:component-scan base-package="app">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
</beans>

 在DispatcherServlet的启动文件里面

 

    <context:component-scan base-package="app">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
    </context:component-scan>

 注入action的service肯定是applicationContext.xml里面。

package结构如下

/src/app/login/service/LoginService.java

/src/app/login/service/impl/LoginServiceImpl.java

package app.login.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import app.login.service.LoginService;

import common.mybatis.dao.TestMapper;
import common.mybatis.entity.Test;

@Service
@Transactional
public class LoginServiceImpl implements LoginService {

	@Autowired
	private TestMapper testMapper;

	@Override
	public int insertA() throws Exception {
		System.out.println();
		System.out.println(testMapper);
		Test record = new Test();
		record.setUserName("01");
		record.setPassword("01");
		testMapper.insert(record);

		if (1 == 1) {
			throw new RuntimeException();
		}
		record = new Test();
		record.setUserName("02");
		record.setPassword("02");
		testMapper.insert(record);
		return 0;
	}

}

 

我测试的时候

第一次

testMapper.insert(record);

执行 以后db就有已经插入数据了。

抛出异常后没有回滚

 

--2013/4/26已解决

配置切面的时候:

    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="del*, delete*" propagation="REQUIRED" read-only="false" isolation="READ_COMMITTED" rollback-for="Exception"/>
            <tx:method name="upd*, update*" propagation="REQUIRED" read-only="false" isolation="READ_COMMITTED" rollback-for="Exception"/>
            <tx:method name="ins*, insert*" propagation="REQUIRED" read-only="false" isolation="READ_COMMITTED" rollback-for="java.lang.RuntimeException"/>
            <tx:method name="find*, get*, select*" propagation="SUPPORTS" isolation="READ_COMMITTED"/>
        </tx:attributes>
    </tx:advice>

 name中不能用逗号

<tx:method name="del*, delete*" propagation="REQUIRED" read-only="false" isolation="READ_COMMITTED" rollback-for="Exception"/>
0
1
分享到:
评论
2 楼 xieyan30 2013-04-26  
arthur8 写道
<context:component-scan base-package="app">  限制下扫描的base-package范围,只扫描@Controller annotation 所在的package

具体可参考下

    http://jinnianshilongnian.iteye.com/blog/1423971

    http://jinnianshilongnian.iteye.com/blog/1762632



你好,谢谢你的回答,但是我的配置和他的没有什么区别,我也修改试过了,还是没有回滚
我的
spring-servlet.xml:
    <context:component-scan base-package="app">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
    </context:component-scan>

只扫描了Controller,
而业务bean配置文件,扫描了service和dao,不重新扫描Controller
    <context:component-scan base-package="app">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

哪位大虾看看,是不是其他地方的错误
主要看运行报告,service并不是代理类(app.login.service.impl.LoginServiceImpl@190931f)
正常应该是******Proxy@16867ea类似的的输出。
1 楼 arthur8 2013-04-25  
<context:component-scan base-package="app">  限制下扫描的base-package范围,只扫描@Controller annotation 所在的package

具体可参考下

    http://jinnianshilongnian.iteye.com/blog/1423971

    http://jinnianshilongnian.iteye.com/blog/1762632

相关推荐

    spring-boot示例项目

    基于这样的背景下,我开源了本示例项目,方便大家快速上手Spring Boot、Spring Cloud 。 每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路...

    Spring Framework 4.x Reference Documentation 中文翻译

    Chinese translation of the Spring Framework 4.x Reference Documentation (http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/) .中文翻译《Spring Framework 4.x参考文档》 — ...

    monkeyk7/spring-oauth-client

    monkeyk7/spring-oauth-clientmonkeyk7/spring-oauth-clientmonkeyk7/spring-oauth-clientmonkeyk7/spring-oauth-clientmonkeyk7/spring-oauth-clientmonkeyk7/spring-oauth-clientmonkeyk7/spring-oauth-...

    mybatis与spring整合全部jar包(包括springmvc).rar

    3.2.7/mybatis-spring-1.2.2/mysql-connector-java-5.1.7-bin/slf4j-api-1.7.5/slf4j-log4j12-1.7.5/spring-aop-4.1.3.RELEASE/spring-aspects-4.1.3.RELEASE/spring-beans-4.1.3.RELEASE/spring-context-4.1.3....

    spring-boot2.0全新教程实例20例.zip

    spring-boot2.0全新教程实例20例.zip - [spring-boot-helloWorld](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-helloWorld):Spring Boot 的 hello World 版本 - [spring-boot-...

    spring-ai-core-0.8.1

    spring-ai-core 0.8.1,解决大家使用2023.0.1.0 版本 Spring Cloud Alibaba 依赖,代码依赖下载报错问题, &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-alibaba-dependencies&lt;/artifactId&gt;...

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    这个就不再详述,具体请看下面,经过详细排查,终于分析完毕相关包的作用,并整理完一套完整的包(由于大小问题没有上传,附图): struts2的包必须版本一致 不能即用2.1.6的包 又用到了2.1.8的包 ,其他版本类似...

    logback-ext-spring-0.1.1

    logback与spring集成的文件,从官网上找的。上传的文件包括源文件和jar包,以下是连接: https://github.com/qos-ch/logback-extensions/wiki/Spring ...

    spring-cloud使用的各种示例

    - [springcloud(十七):服务网关 Spring Cloud GateWay 熔断、限流、重试](http://www.ityouknow.com/springcloud/2019/01/26/spring-cloud-gateway-limit.html) 综合篇: - **[Spring Cloud在国内中小型公司...

    Spring3+Hibernate4+Struts2 jar包

    2013/03/21 18:20 126,740 spring-context-support-3.2.0.RC2.jar 2013/03/21 18:20 863,315 spring-core-3.2.0.RC2.jar 2013/03/21 18:20 193,557 spring-expression-3.2.0.RC2.jar 2013/03/21 18:20 400,914 ...

    logback-ext-spring

    spring使用logback的扩展,使用起来非常方便。在web.xml中配置: &lt;context-param&gt; &lt;param-name&gt;logbackConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/conf/logback.xml&lt;/param-value&gt; &lt;/context-param&gt; ...

    13spring4_mybatis2.rar

    spring整合mybatis。/13spring4_mybatis2/lib/aopalliance.jar /13spring4_mybatis2/lib/asm-3.3.1.jar /13spring4_mybatis2/lib/aspectjweaver.jar .../13spring4_mybatis2/lib/spring-webmvc-4.1.6.RELEASE.jar

    spring-framework-3.0.5.RELEASE-with-docs.zip/dependencies.zip(二合一)

    这里提到的 "spring-framework-3.0.5.RELEASE-with-docs.zip" 和 "spring-framework-3.0.5.RELEASE-dependencies.zip" 是 Spring 框架3.0.5版本的两个不同部分。 首先,"spring-framework-3.0.5.RELEASE-with-docs....

    spring-data-commons-1.8.0.RELEASE

    spring data jpa的包。spring-data-commons-1.8.0.RELEASE.jar

    最新 spring-framework-4.2.5 英文官方文档,包含html、pdf、epub等

    Spring Framework 4.2.5 是一个里程碑式的版本,在Java企业级应用开发中扮演着核心角色。这个框架提供了丰富的功能,包括依赖注入、面向切面编程(AOP)、数据访问、Web开发、集成测试和更多。以下是这个版本的一些...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    同时使用了Struts2、Spring4、Hibernate4、log4j、slf4j、junit4、ehcache等库或框架,搭建一个最基本的项目原型。 三、 三大框架最新版本下载:截止2014-10-01 Struts2.3.6:发布于2014-05-03,目前的最新版本。...

    spring事务与数据库操作

    ### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...

    JSF2整合Spring3------JSF学习笔记4

    在`spring-servlet.xml`中配置事务管理器,并在需要的Service类上添加`@Transactional`注解: ```xml &lt;tx:annotation-driven transaction-manager="transactionManager"/&gt; ...

    Spring事务管理Demo

    在Spring框架中,事务管理是核心特性之一,它允许开发者以声明式或编程式的方式处理应用中的事务。Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何...

    解决osgi spring 事务配置问题

    Spring Dynamic Modules(Spring-DM,现在已经被Spring OSGi取代)提供了一种方式来处理这种情况,它可以帮助我们在OSGi环境中创建透明的Spring事务代理。 此外,我们需要确保所有涉及事务的服务都在同一个...

Global site tag (gtag.js) - Google Analytics