当前位置:编程学习 > JAVA >>

单纯spring注解的MVC事物不回滚

只使用springMVC注解形式的事物不回滚
spring.xml代码如下:
<context:annotation-config />
<!-- 把标记了@Controller @Service 注解的类转换为bean -->
<context:component-scan base-package="com.kanq" />
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean 
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/" />
<property name="suffix" value=".jsp" />
</bean>

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
</bean>
<!-- 加载 jdbc.properties -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:jdbc.properties</value>
</list>
</property>
</bean>
<context:annotation-config />
<context:component-scan base-package="com.kanq.*" />  <!-- 自动扫描所有注解该路径 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
    <tx:annotation-driven mode="aspectj"/> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
<property name="driverClassName"><value>${jdbc.driverClassName}</value></property> 
<property name="url"><value>${jdbc.url}</value></property> 
<property name="username"><value>${jdbc.username}</value></property> 
<property name="password"><value>${jdbc.password}</value></property> 
<property name="maxActive"><value>80</value></property>   
 <property name="maxIdle"><value>20</value></property>   
<property name="maxWait"><value>3000</value></property>   
</bean>


<!-- 事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource" />
</beans>

service层代码如下:
@Service
public class EmployeeSerImp implements IEmployeeService{

@Autowired 
private IEmployee employeeImp;

@Override
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,rollbackFor={java.lang.Exception.class})
public void shiwu(Employee emp,int eNo){
// TODO Auto-generated method stub
employeeImp.deleteById(eNo);
employeeImp.add(emp);
}

}
deleteById()方易做图确,add方法错误,但是数据库还是删除了。求解。 Spring , MVC ,注解 --------------------编程问答-------------------- 在最简单的形式下,@Transactional 指定一个接口、类、方法必须是事务性的,其默认事务语义为:read/write,PROPAGATION_REQUIRED ,ISOLATION_DEFAULT ,TIMEOUT_DEFAULT ,而且仅当遇到RuntimeException 时回滚,而不是Exception 。


在最简单的形式下,@Transactional指定一个接口、类、方法必须是事务性的,其默认事务语义为:
read/write。Propagation_required,Islation_default,timeout_default,而且仅当遇到
RuntimeException时回滚,而不是Exception --------------------编程问答-------------------- 我比较关心你执行SQL的方式 如果你是手动获取数据源获取连接实现你的DAO操作 而不是通过spring提供的增删改查完成操作的话 那么不回滚的事情也就可以解释了 BTW 发代码用着色块发 --------------------编程问答-------------------- 你的问题与我刚提的有些类似, 可参考
http://bbs.csdn.net/topics/390561455

看了你的代码,在spring配置文件中加了
<!-- enable the configuration of transactional behavior based on annotations -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,