spring事务| 耗时:0.211秒|13969条结果

spring 事务

Spring 提供的几种事务控制 1.PROPAGATION_REQUIRED(加入已有事务) 尝试加入已经存在的事务中,如果没有则开启一个新的事务。 注意:如果这个事务回滚,因为和调用方使用的是一个事务,所以调用方的事务同时回滚,这一点也是和nested事务的区别之处
http://www.itnose.net/detail/6670451.html 2016-11-26 21:35   [Spring]

Spring 事务

1.spring默认对于runtimeException进行回滚,对于Exception不回滚,若以要对Exception进行回滚,则要使用rollbackFor=异常.class 事物传播行为 2. 一旦对类作用事物,则通过某方法上设置propagation
http://www.itnose.net/detail/479597.html 2014-01-23 16:50   [Spring]

Spring事务

活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,       则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行 Spring事务的隔离级别  1. 
http://www.itnose.net/detail/475649.html 2014-01-22 18:33   [Spring]

spring事务

现在项目中,有这种情况,<tx:method name="*" propagation="REQUIRED" rollback-for="Throwable" />,已经配置好了这种事务管理,然后就是A调用B,B调用C,我想着A是一个事务,B使用try catch,不使用事务,C也使用事务,但是不和A是一个事务。这种情况怎么解决啊。求大神帮助 回复讨论(解决方案) 你是怎么样? c的事务,提交不影响A?,调用时a异常了,a事务回滚, c有事务提交。 调用时,c异常了,事务回滚,b处理了异常, a的事务照样提交? 是这样吗? 那么你的事务传播,就要改改了, a的propagation="REQUIRES_NEW"使用新事务 你是怎么样? c的事务,提交不影响A?,调用时a异常了,a事务回滚, c有事务提交。 调用时,c异常了,事务回滚,b处理了异常, a的事务照样提交? 是这样吗? 那么你的事务传播,就要改改了, a的propagation="REQUIRES_NEW"使用新事务 修改下,其实应该是A调用C和B,c不使用事务,B使用事务,但是不想A和B在一个事务里面。就是B异常了,只回滚B,A不会滚 修改下,其实应该是A调用C和B,c不使用事务,B使用事务,但是不想A和B在一个事务里面。就是B异常了,只回滚B,A不会滚  再补充下,A,B在一个类中,C不和AB一个类 楼主高深啊。。。 楼主高深啊。。。 赶紧回答问题啊 分层执行,然后配置每一个方法的事务,大概如此了, 分层执行,然后配置每一个方法的事务,大概如此了, 好吧,要是在B方法上面加注解的方式可以么,我刚才调用了下,貌似不行,还是给我全部回滚了 在B方法定义处加上注解@Transactional(propagation=Propagation.REQUIRES_NEW),创建新的事务;同时在配置文件中对基于注解的方式使用事务进行配置声明<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />  在B方法定义处加上注解@Transactional(propagation=Propagation.REQUIRES_NEW),创建新的事务;同时在配置文件中对基于注解的方式使用事务进行配置声明<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />  9楼正解,测试没问题。thanks
http://www.itnose.net/detail/50747.html 2013-12-31-16:07   [JavaWeb]

spring事务 -- 编程式事务

Spring的编程式事务处理, 推荐使用TransactionTemplate类来管理编程式事务, 这个类有两种回调: TransactionCallbackWithoutResult ?? 执行事务没有返回值,例如save、update、delete等等; 
http://www.itnose.net/detail/519271.html 2014-02-06 10:12   [Spring]

Spring-17、Spring事务

http://www.itnose.net/detail/6270353.html 2015-05-12 15:28   [Spring]

Spring配置Hibernate事务

则是通过配置文件或者注解进行操作。          在Spring中有声明式事务的概念,通过和Hibernate类似框架的集成,可以很好的完成声明式事务。      
http://www.itnose.net/detail/6736423.html 2017-03-27 12:50   [Hibernate]

spring事务源码解析

前言   在spring jdbcTemplate 事务,各种诡异,包你醍醐灌顶!最后遗留了一个问题:spring是怎么样保证事务一致性的? 当然,spring事务内容挺多的,如果都要讲的话要花很长时间,而本片博客的主旨是解决上一篇博客遗留的问题,那么我们把问题细化下来, 就是spring如何保证一个事务中的jdbc connection是同一个? 没有事务   如若没有事务,这个很好理解,可以理解成spring只是对我们一般的jdbc操作进行了一些封装,减少了我们的代码量   1、一般写法     代码中的Connection的获取有很多种方式,不一定是代码中jdbcTemplate的方式,大家看的时候可以假设成其他的方式 public int insertOnePerson(String name, int age) { int result = 0; Connection conn = null; PreparedStatement pstmt = null; try { conn = jdbcTemplate.getDataSource().getConnection(); if(conn != null) { conn.setAutoCommit(false); pstmt = conn.prepareStatement(DELETE_ONE_PERSON); pstmt.setString(1, name); int count = pstmt.executeUpdate(); pstmt.close(); if(count >= 0) { pstmt = conn.prepareStatement(INSERT_ONE_PERSON); pstmt.setString(1, name); pstmt.setString(2, "1adh"); // 引发异常 result = pstmt.executeUpdate(); } conn.commit(); } } catch (SQLException e) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { System.out.println("rollback failed.."); e1.printStackTrace(); } } finally { try{ conn.setAutoCommit(true); if(pstmt != null){ pstmt.close(); } if(conn != null){ conn.close(); } }catch(SQLException e){ } } return result ; }   2、spring jdbc的写法 public int insertOnePerson(String name, int age) { int result = 0; int count = jdbcTemplate.update(DELETE_ONE_PERSON, new Object[]{name}); if(count >= 0) { result = jdbcTemplate.update(INSERT_ONE_PERSON, new Object[]{name,"l123a"}); } return result ; }   两者对比,就会发现我们用spring jdbc的代码量减少了很多,流程如下      不考虑事务,一次数据库操作就对应一个Connection,前后不同的操作对应的不同Connection,那么每次对数据库的请求是互不影响的。那么spring真的是这么实现的吗? 暂且先留个悬念。 存在事务   如若有需要用事务的需求,那么我们会怎么实现了?   1、jdbc  事务     这个是最基本的,也是最容易想到的;关闭Connection的自动提交(con.setAutoCommit(false);),用同一个Connection执行不同的数据库请求,最后提交(con.commit();),有异常则进行回滚(con.rollback();),最后释放资源(如果有连接池,那么con设置成自动提交即可(con.setAutoCommit(true);));   2、spring 事务     这种方式可能能想到,但是很多人都不理解,追根究底就是不了解spring事务的源码 spring事务源码解析   一、事务自定义标签的解析   spring-tx-xx.jar中的包org.springframework.transaction.config下的init方法中有这么一句:registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser()); 那么我们就从AnnotationDrivenBeanDefinitionParser的parse方法开始(为什么是从这个方法开始,后续会回答) /** * Parses the {@code <tx:annotation-driven/>} tag. Will * {@link AopNamespaceUtils#registerAutoProxyCreatorIfNecessary register an AutoProxyCreator} * with the container as necessary. */ public BeanDefinition parse(Element element, ParserContext parserContext) { String mode = element.getAttribute("mode"); if ("aspectj".equals(mode)) { // mode="aspectj" registerTransactionAspect(element, parserContext); } else { // mode="proxy" AopAutoProxyConfigurer.configureAutoProxyCreator(element, parserContext); } return null; }   1、跟进AopAutoProxyConfigurer.configureAutoProxyCreator(element, parserContext);这个方法注册了代理类以及支撑起整个事务功能的三个bean:BeanFactoryTransactionAttributeSourceAdvisor、AnnotationTransactionAttributeSource、TransactionInterceptor,其中AnnotationTransactionAttributeSource和TransactionInterceptor被注册到了BeanFactoryTransactionAttributeSourceAdvisor中 public static void configureAutoProxyCreator(Element element, ParserContext parserContext) { AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(parserContext, element); String txAdvisorBeanName = TransactionManagementConfigUtils.TRANSACTION_ADVISOR_BEAN_NAME; if (!parserContext.getRegistry().containsBeanDefinition(txAdvisorBeanName)) { Object eleSource = parserContext.extractSource(element); // Create the TransactionAttributeSource definition. RootBeanDefinition sourceDef = new RootBeanDefinition( "org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"); sourceDef.setSource(eleSource); sourceDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); String sourceName = parserContext.getReaderContext().registerWithGeneratedName(sourceDef); // Create the TransactionInterceptor definition. RootBeanDefinition interceptorDef = new RootBeanDefinition(TransactionInterceptor.class); interceptorDef.setSource(eleSource); interceptorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); registerTransactionManager(element, interceptorDef); interceptorDef.getPropertyValues().add("transactionAttributeSource", new RuntimeBeanReference(sourceName)); String interceptorName = parserContext.getReaderContext().registerWithGeneratedName(interceptorDef); // Create the TransactionAttributeSourceAdvisor definition. RootBeanDefinition advisorDef = new RootBeanDefinition(BeanFactoryTransactionAttributeSourceAdvisor.class); advisorDef.setSource(eleSource); advisorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); advisorDef.getPropertyValues().add("transactionAttributeSource", new RuntimeBeanReference(sourceName)); advisorDef.getPropertyValues().add("adviceBeanName", interceptorName); if (element.hasAttribute("order")) { advisorDef.getPropertyValues().add("order", element.getAttribute("order")); } parserContext.getRegistry().registerBeanDefinition(txAdvisorBeanName, advisorDef); CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(element.getTagName(), eleSource); compositeDef.addNestedComponent(new BeanComponentDefinition(sourceDef, sourceName)); compositeDef.addNestedComponent(new BeanComponentDefinition(interceptorDef, interceptorName)); compositeDef.addNestedComponent(new BeanComponentDefinition(advisorDef, txAdvisorBeanName)); parserContext.registerComponent(compositeDef); } }   我们先看代理类的注册,跟进AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(parserContext, element);接着跟进BeanDefinition beanDefinition = AopConfigUtils.registerAutoProxyCreatorIfNecessary(parserContext.getRegistry(), parserContext.extractSource(sourceElement));发现registerOrEscalateApcAsRequired(InfrastructureAdvisorAutoProxyCreator.class, registry, source),我们先来看看InfrastructureAdvisorAutoProxyCreator类的层次结构图,发现它间接实现了BeanPostProcessor接口,那么spring在实例化bean的时候,都会保证调用其postProcessAfterInitialization方法(spring为什么一定会调用这个方法,后续会回答)   InfrastructureAdvisorAutoProxyCreator类的层次结构图    2、跟进postProcessAfterInitialization方法(在类AbstractAutoProxyCreator中,注意看继承关系),对指定的、我们定义的bean进行封装,封装的工作委托给了调用了wrapIfNecessary(bean, beanName, cacheKey)方法 /** * Create a proxy with the configured interceptors if the bean is * identified as one to proxy by the subclass. * @see #getAdvicesAndAdvisorsForBean */ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean != null) { Object cacheKey = getCacheKey(bean.getClass(), beanName); if (!this.earlyProxyReferences.containsKey(cacheKey)) { return wrapIfNecessary(bean, beanName, cacheKey); } } return bean; }   3、跟进wrapIfNecessary方法,发现主要做了两件事:(1)找出指定bean对应的增强器、(2)根据找出的增强器创建代理 /** * Wrap the given bean if necessary, i.e. if it is eligible for being proxied. * @param bean the raw bean instance * @param beanName the name of the bean * @param cacheKey the cache key for metadata access * @return a proxy wrapping the bean, or the raw bean instance as-is */ protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey) { if (beanName != null && this.targetSourcedBeans.containsKey(beanName)) { return bean; } if (Boolean.FALSE.equals(this.advisedBeans.get(cacheKey))) { return bean; } if (isInfrastructureClass(bean.getClass()) || shouldSkip(bean.getClass(), beanName)) { this.advisedBeans.put(cacheKey, Boolean.FALSE); return bean; } // Create proxy if we have advice. Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null); if (specificInterceptors != DO_NOT_PROXY) { this.advisedBeans.put(cacheKey, Boolean.TRUE); Object proxy = createProxy(bean.getClass(), beanName, specificInterceptors, new SingletonTargetSource(bean)); this.proxyTypes.put(cacheKey, proxy.getClass()); return proxy; } this.advisedBeans.put(cacheKey, Boolean.FALSE); return bean; }   (1)找出指定bean对应的增强器   跟进getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null)(当前正处于AbstractAutoProxyCreator中,而AbstractAdvisorAutoProxyCreator是AbstractAutoProxyCreator的子类、是InfrastructureAdvisorAutoProxyCreator的父类,而我们的起点类是InfrastructureAdvisorAutoProxyCreator,所以跟进到AbstractAdvisorAutoProxyCreator中去) @Override protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String beanName, TargetSource targetSource) { List advisors = findEligibleAdvisors(beanClass, beanName); if (advisors.isEmpty()) { return DO_NOT_PROXY; } return advisors.toArray
http://www.itnose.net/detail/6727040.html 2017-03-04 21:04   [J2SE]

Spring事务控制@Transactional

学习spring事务控制,首先需要知晓两个关键: 1、spring事务传播属性 2、spring事务隔离级别 正常的使用方式:@Transactional(propagation = Propagation.REQUIRED, isolation
http://www.itnose.net/detail/6667378.html 2016-11-18 13:30   [Spring]

Spring中的事务

Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 DataSource、 TransactionManager这两部分只是会根据数据访问方式有所
http://www.itnose.net/detail/6656685.html 2016-10-20 11:07   [J2SE]

spring 事务回滚

使用Spring事务解决这个问题。 2、异常的一些基本知识 1) 异常的架构   异常的继承结构:Throwable为基类,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception。Error和
http://www.itnose.net/detail/6655148.html 2016-10-16 06:14   [J2SE]

Spring事务的理解

 事务的基本原理: Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con
http://www.itnose.net/detail/6626906.html 2016-08-17 14:00   [Spring]

Spring事务操作

exception)则回滚到savepoint处,但不影响外层事务;外层事务的回滚会一起回滚内层事务; (对于spring-jdbc和mybatis有用  但是对于hibernate的sessionFactory是没有有用的) 隔离级别 *    1.isolation:事务
http://www.itnose.net/detail/6530763.html 2016-07-12 20:25   [Spring]

spring事务操作

exception)则回滚到savepoint处,但不影响外层事务;外层事务的回滚会一起回滚内层事务; (对于spring-jdbc和mybatis有用 但是对于hibernate的sessionFactory是没有有用的) 隔离级别 * 1.isolation:事务的隔离级别
http://www.itnose.net/detail/6530668.html 2016-07-12 00:15   [J2SE]

  1  2  3  4  5 下一页>