当前位置: 代码迷 >> J2EE >> spring aop事务为什么不回滚呢?解决办法
  详细解决方案

spring aop事务为什么不回滚呢?解决办法

热度:52   发布时间:2016-04-22 02:22:51.0
spring aop事务为什么不回滚呢?
大家帮我看下,太纠结了。数据库是oracle 10g 设置了回滚事务,就是不回滚,每次都插入了数据。
XML code
    <!-- spring2.0的配置方式 -->    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource">            <ref bean="dataSource" />        </property>    </bean>    <!-- 事务通知 -->    <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>            <!-- <tx:method name="add*" propagation="REQUIRED" /> -->            <tx:method name="mod*" propagation="REQUIRED" />            <tx:method name="*" read-only="true"                rollback-for="Exception,RuntimeException,SQLException"                propagation="REQUIRED" />        </tx:attributes>    </tx:advice>    <!-- Spring AOP config -->    <aop:config proxy-target-class="true">        <!-- 切入点 -->        <aop:pointcut id="servicesPointcut"            expression="execution(* com.zyujie.service..*Impl.*(..))" />        <!-- <aop:pointcut id="daoPointcut"            expression="execution(* com.zyujie.dao..*.*(..))" /> -->        <!-- 运行拦截 -->        <aop:advisor advice-ref="txAdvice"            pointcut-ref="servicesPointcut" />        <!-- <aop:advisor advice-ref="txAdvice" pointcut-ref="daoPointcut" /> -->    </aop:config>

Java code
/*     * 添加用户,为了测试是否开启事务。DAO层的方法     */    public int addUser(SysUser user) {        logger.debug("开始执行添加用户的操作......");        Connection con = ConnectionFactory.getConnection();        String sql = "INSERT INTO USER_INFO VALUES (?,?,?,?,?,?,?,?,sysdate)";        int result = 0;        PreparedStatement ps = null;        try {            // con.setAutoCommit(false);            ps = con.prepareStatement(sql);            for (int i = 0; i < 1000; i++) {                String temps = i + "user";                if (i == 600) {                    temps = null;                }                ps.setString(1, temps);                ps.setString(2, "test");                ps.setString(3, "99");                ps.setString(4, "测试地市");                ps.setString(5, "888");                ps.setString(6, "测试部门");                ps.setString(7, "888888");                ps.setString(8, "2");                // ps.setString(9, "");                result += ps.executeUpdate(); //有人说是这里本身就已经提交了,但是还是问问大家。            }            // con.commit();        } catch (Exception e) {            logger.debug("添加用户事务回滚了......");            // throw new RuntimeException("error"); // 抛出异常,测试回滚            throw new RuntimeException(); // 抛出异常,测试回滚        } finally {            try {                if (ps != null) {                    ps.close();                }                if (con != null) {                    con.close();                }            } catch (SQLException e) {                // e.printStackTrace();                // throw new RuntimeException(); // 抛出异常,测试回滚            }        }        return result;    }

Java code
    /*     * 添加用户,为了测试是否开启事务。Service层的接口实现类,方法     */    public int addUser(SysUser user) {        return sysUserDAO.addUser(user);    }
  相关解决方案